¿Por qué StringBuilder no es seguro para subprocesos?
En las preguntas de la entrevista anterior, comparamos las diferencias entre String, StringBuilder y StringBuffer. Una de las preguntas mencionaba que StringBuilder no es seguro para subprocesos, entonces, ¿cuál es la razón por la que StringBuilder? ¿Qué pasa con los subprocesos que no son seguros para subprocesos? ¿Cuál es la razón por la que StringBuilder no es seguro para subprocesos?
Análisis de causa
Si observa el código fuente de StringBuilder o StringBuffer, encontrará que StringBuilder no usa sincronización de subprocesos en la operación de agregar, mientras que StringBuffer usa sincronizado en casi la mayoría de sus métodos.
Esta afirmación es ciertamente correcta, lo cual se puede ver comparando algunos de los códigos fuente de StringBuilder y StringBuffer.
Código fuente del método append de StringBuilder:
@Override
public StringBuilder append(String str) {
super.append ( str);
devuelve esto;
}
El código fuente del método append de StringBuffer:
@Override p>
StringBuffer público sincronizado append(String str) {
toStringCache = null;
super.append(str);
devuelve esto;
}