Junior
Aké sú rozdiely medzi StringBuilder a StringBuffer v Jave?
sobes.tech AI
Odpoveď od AI
Hlavný rozdiel je v tom, že StringBuffer je vlákno bezpečný, zatiaľ čo StringBuilder nie je.
-
StringBuffer: Všetky jeho metódy sú synchronizované (synchronized). To zabezpečuje bezpečnosť pri práci s viacerými vláknami súčasne, zaručujúc, že iba jedno vlákno môže vykonať metódu v danom momente. To však tiež vedie k zníženiu výkonu kvôli nákladom na synchronizáciu. -
StringBuilder: Metódy nie sú synchronizované. To ho robí rýchlejším akoStringBufferv prostredí s jedným vláknom. Pri použití viacerými vláknami bez vonkajšej synchronizácie môžu nastať nesprávne výsledky, pretože operácie sa môžu prekrývať.
Kedy použiť:
- Použite
StringBuilderv jednovláknových aplikáciách alebo keď je bezpečnosť vlákien zabezpečená na vyššej úrovni. Je rýchlejší. - Použite
StringBufferv viacvláknových aplikáciách, kde viacero vlákien môže súčasne upravovať ten istý objekt, a potrebujete zabudovanú bezpečnosť vlákien.
Príklad:
// StringBuilder v prostredí s jedným vláknom (preferované)
StringBuilder sb = new StringBuilder();
sb.append("Ahoj").append(" ").append("svet");
System.out.println(sb.toString()); // Vytlačí "Ahoj svet"
// StringBuffer v prostredí s viacerými vláknami (bezpečnejšie pri súčasnom prístupe)
StringBuffer sbf = new StringBuffer();
// V reálnom viacvláknovom scenári budú vlákna pristupovať k sbf
sbf.append("Vláknо ").append(Thread.currentThread().getId());
System.out.println(sbf.toString()); // Vytlačí niečo ako "Vláknо 1" alebo "Vláknо 2" v závislosti od vlákna