Red de conocimiento informático - Problemas con los teléfonos móviles - ¿Por qué StringBuilder no es seguro para subprocesos?

¿Por qué StringBuilder no es seguro para subprocesos?

Consejo principal: en las preguntas de la entrevista anterior que explican las diferencias entre String, StringBuilder y StringBuffer, una pregunta mencionó que StringBuilder no es seguro para subprocesos. Entonces, ¿qué causa que StringBuilder no sea seguro para subprocesos? Si observa el código fuente de StringBuilder o StringBuffer, encontrará que StringBuilder no usa sincronización de subprocesos en operaciones de adición, mientras que StringBuffer usa la palabra clave sincronizada en casi la mayoría de sus métodos para lograr la sincronización a nivel de método. La afirmación anterior es indudablemente correcta

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

StringBuffer público sincronizado append(String str) {

toStringCache = null;

super.append(str);

devuelve esto;

}