Pregunta

Sé que SimpleDateFormat y NumberFormat NO son seguros para subprocesos.
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4101500

Pero, ¿qué acerca de las otras clases de Formato como MessageFormat?

Fortalecer 360 está decayendo en el uso de "MessageFormat.format(String, Object...)" método estático como una "Carrera de Condición - Formato de Error" problema, pero cuando voy a analizar el código fuente de MessageFormat, vi que en este método, se crea una nueva instancia local de MessageFormat sí mismo.

Es el Java MessageFormat de la Clase thread safe?

¿Fue útil?

Solución

The javadoc para MessageFormat dice:

Los formatos de mensaje no están sincronizados. Se recomienda crear separado. Formato de instancias para cada hilo.Si Múltiples subprocesos acceden a un formato Al mismo tiempo, debe ser sincronizado. externamente.

Oficialmente, no, no es seguro.

Los documentos para SimpleDateFormat dicen mucho lo mismo.

Ahora, los documentos pueden ser conservadores, y en la práctica, funcionará bien en múltiples hilos, pero no vale la pena el riesgo.

Otros consejos

Si se está refrescando al método

public static String format(String pattern, Object... arguments)

Esto es seguro de hilo, ya que como se describe en el Javadoc, crea un nuevo MessageFormat para hacer el formato.

Por cierto, eso es un typo divertido en su título 'SIMPLETHREADFORMAT' :)

Por el javadoc, MessageFormat los objetos no son seguros para subprocesos.Usted puede utilizar un ThreadLocal para crear un objeto independiente para cada subproceso que necesita uno.

ThreadLocal<MessageFormat> threadLocalMessageFormat =
    new ThreadLocal<MessageFormat>() {
        @Override
        protected MessageFormat initialValue() {
            return new MessageFormat(pattern);
        }
    };

Usted puede utilizar threadLocalMessageFormat.get() para obtener un MessageFormat para el subproceso actual.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top