Sobes.tech
Junior

Java-da StringBuilder və StringBuffer arasındakı fərqlər nələrdir?

sobes.tech Süni İntellekt

AI-dan cavab

Əsas fərq odur ki, StringBuffer çox iş parçacığı təhlükəsizdir, StringBuilder isə deyil.

  • StringBuffer: Bütün metodları sinxronizasiya olunub (synchronized). Bu, çox iş parçacığı ilə işləyərkən təhlükəsizliyi təmin edir və yalnız bir iş parçacığı bir vaxtda metod icra edə bilər. Ancaq bu, sinxronizasiya xərcləri səbəbindən performansı azaldır.

  • StringBuilder: Metodlar sinxronizasiya olunmayıb. Bu, onu tək iş parçacığı mühitində StringBuffer-dən daha sürətli edir. Bir neçə iş parçacığı StringBuilder-dən istifadə edərkən və xarici sinxronizasiya olmadan düzgün nəticələr əldə edilə bilməz, çünki əməliyyatlar qarışa bilər.

Nə zaman istifadə etmək:

  • Tək iş parçacığı tətbiqlərində və ya iş parçacığı təhlükəsizliyi daha yüksək səviyyədə təmin olunubsa, StringBuilder istifadə edin. O daha sürətlidir.
  • Çox iş parçacığı tətbiqlərində, bir neçə iş parçacığı eyni anda eyni obyekti dəyişə bilirsə və daxili iş parçacığı təhlükəsizliyi lazımdırsa, StringBuffer istifadə edin.

Nümunə:

// Tək iş parçacığı mühitində `StringBuilder` (üstünlük)
StringBuilder sb = new StringBuilder();
sb.append("Salam").append(" ").append("Dünya");
System.out.println(sb.toString()); // "Salam Dünya" çap edir

// Çox iş parçacığı mühitində `StringBuffer` (daha təhlükəsiz)
StringBuffer sbf = new StringBuffer();
// Əsl çox iş parçacığı senaryosunda, iş parçacqları sbf-ə müraciət edəcək
sbf.append("İş Parçacığı ").append(Thread.currentThread().getId());
System.out.println(sbf.toString()); // "İş Parçacığı 1" və ya "İş Parçacığı 2" kimi göstərəcək, iş parçacığından asılı olaraq