Junior
Mik a különbségek a StringBuilder és a StringBuffer között Java-ban?
sobes.tech MI
Válasz az MI-től
A fő különbség az, hogy a StringBuffer szálbiztos, míg a StringBuilder nem.
-
StringBuffer: Minden metódusa szinkronizált (synchronized). Ez biztosítja a biztonságot több szál egyidejű használata esetén, garantálva, hogy csak egy szál hajthat végre egy metódust egyszerre. Ez azonban a szinkronizációs költségek miatt a teljesítményt csökkenti. -
StringBuilder: A metódusok nem szinkronizáltak. Ez gyorsabbá teszi, mint aStringBufferegyszálú környezetben. Több szál esetén, külső szinkronizáció nélkül, helytelen eredményekhez vezethet, mivel az műveletek összefonódhatnak.
Mikor használjuk:
- Használja a
StringBuilder-t egyszálú alkalmazásokban vagy amikor a szálbiztonság magasabb szinten biztosított. Gyorsabb. - Használja a
StringBuffer-t több szálas alkalmazásokban, ahol több szál módosíthatja ugyanazt az objektumot, és beépített szálbiztonságra van szükség.
Példa:
// StringBuilder egyszálú környezetben (preferált)
StringBuilder sb = new StringBuilder();
sb.append("Helló").append(" ").append("Világ");
System.out.println(sb.toString()); // "Helló Világ" kiírás
// StringBuffer több szálas környezetben (biztonságosabb párhuzamos hozzáférés esetén)
StringBuffer sbf = new StringBuffer();
// Valós több szálas szcenárióban a szálak hozzáférnek a sbf-hez
sbf.append("Szál ").append(Thread.currentThread().getId());
System.out.println(sbf.toString()); // Valami ilyesmit fog kiírni, mint "Szál 1" vagy "Szál 2" a szál függvényében