Junior
Jaké jsou rozdíly mezi StringBuilder a StringBuffer v Java?
sobes.tech AI
Odpověď od AI
Hlavní rozdíl je v tom, že StringBuffer je vlákno bezpečný, zatímco StringBuilder ne.
-
StringBuffer: Všechny jeho metody jsou synchronizované (synchronized). To zajišťuje bezpečnost při práci s více vlákny současně, zajišťujíc, že pouze jedno vlákno může vykonat metodu v daném okamžiku. To však také snižuje výkon kvůli nákladům na synchronizaci. -
StringBuilder: Metody nejsou synchronizované. To ho činí rychlejším nežStringBufferv prostředí s jedním vláknem. Při použitíStringBuilderz více vláken bez vnější synchronizace mohou nastat nesprávné výsledky, protože operace se mohou prolínat.
Kdy používat:
- Používejte
StringBuilderv jednovláknových aplikacích nebo když je bezpečnost vláken zajištěna na vyšší úrovni. Je rychlejší. - Používejte
StringBufferve vícevláknových aplikacích, kde může více vláken současně upravovat stejný objekt, a potřebujete vestavěnou bezpečnost vláken.
Příklad:
// StringBuilder v prostředí s jedním vláknem (preferováno)
StringBuilder sb = new StringBuilder();
sb.append("Ahoj").append(" ").append("Svět");
System.out.println(sb.toString()); // Vytiskne "Ahoj Svět"
// StringBuffer v prostředí s více vlákny (bezpečnější při současném přístupu)
StringBuffer sbf = new StringBuffer();
// V reálném vícevláknovém scénáři budou vlákna přistupovat ke sbf
sbf.append("Vlákno ").append(Thread.currentThread().getId());
System.out.println(sbf.toString()); // Vytiskne něco jako "Vlákno 1" nebo "Vlákno 2" v závislosti na vláknu