Estoy construyendo una cadena de múltiples piezas y quiero usar StringBuffer
o StringBuilder
para hacerlo. A partir de los documentos de Java 5, veo que StringBuilder
se prefiere cuando sea posible, con la advertencia de queJava StringBuilder and Thread Safety
Las instancias de
StringBuilder
no son seguros para su uso por varios subprocesos.
De esta declaración, entiendo que no debería tener una única instancia StringBuilder
compartida por varios subprocesos. Pero ¿qué pasa con este caso:
//Is this safe?
//foo() is called simultaneously by multiple threads
String foo(String a, String b) {
return new StringBuilder(a).append(b).toString();
}
Aquí podría haber múltiples hilos en la función, al mismo tiempo, utilizando la clase StringBuilder
al mismo tiempo (por ejemplo, el acceso simultáneo de variables estáticas, si los hay), pero cada hilo tendría su propia instancia separada de StringBuilder
. De la documentación, no puedo decidir si esto cuenta como uso por múltiples hilos o no.
Puede haber algún beneficio al hacer foo() un método estático también, ya que no toca ninguna variable de instancia. – Kip
@Kip: Depende de la clase. Pero algunas veces es posible que desee realizar operaciones polimórficas y hacer que el método sea estático lo impedirá. – OscarRyz
El uso de String.concat sería más rápido, pero creo que esto es solo un ejemplo. –