En una aplicación web de producción, mis compañeros programadores utilizaron StringBuffer en todas partes. Ahora me encargo del desarrollo de aplicaciones y correcciones. Después de leer StringBuilder y StringBuffer , he decidido reemplazar todo el código StringBuffer con StringBuilder porque no necesitamos seguridad de subprocesos en nuestros beans de datos.
Por ejemplo: (en cada bean de datos puedo ver el uso de StringBuffer)
@Override
public String toString() {
StringBuffer sb = new StringBuffer();// replace it from StringBuilder
sb.append(" ABCD : ").append(abcd);
sb.append(", EFGH : ").append(efgh);
sb.append(", IJKL : ").append(ijkl);
}
Creamos un bean de datos separado para cada sesión / solicitud. Una sesión es utilizada por un solo usuario, ningún otro usuario puede acceder a ella.
¿Debo considerar otros puntos antes de migrar?
Si hay un solo subproceso (no hay subprocesos en espera / no se buscará un nuevo subproceso para el bloqueo del objeto), se realiza igualmente con StringBuffer o StringBuilder. Sé que en el caso de StringBuffer, lleva tiempo bloquear el objeto, pero quiero saber si hay alguna diferencia de rendimiento entre ellos, excepto la retención / liberación del bloqueo del objeto.
StringBuffer
. Nunca he visto un código así, pero estoy casi seguro de que es un mal diseño desde una perspectiva de subprocesos múltiples. Como creo que sincronizar el hilo a lo largo de la StringBuffer
interfaz es una mala idea, creo que esta clase no debería existir y siempre se debe usar StringBuilder
. Como otros ya mencionaron, StringBuffer
existe por razones históricas.
sb
como una variable local como en su ejemplo, entonces la seguridad de subprocesos no importa en absoluto. Incluso si miles de hilos ingresaron simultáneamente al método, cada uno tendría su propia pila de llamadas con sus propias variables locales. Los StringBuilders nunca interferirían entre sí.