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,
StringBuilderistifadə 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,
StringBufferistifadə 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