Tengo que imprimir muchos valores decimales formateados en muchos subprocesos en paralelo. Para formatear los valores decimales utilizo un java.text.DecimalFormat
configurado por un patrón. Soy consciente de la advertencia del doc java de DecimalFormat
:DecimalFormat.format (doble) en diferentes subprocesos
formatos decimales son generalmente no sincronizados. Se recomienda crear instancias de formato separadas para cada hilo. Si múltiples hilos acceden a un formato al mismo tiempo, debe sincronizarse externamente.
Pero no sé si esta advertencia se aplica a mi escenario: configuro el java.text.DecimalFormat
una vez cuando se inicia la aplicación (y almacenan la Formatter
en un campo final). Después de eso SÓLO uso el método format(double)
.
La razón por la que quiero hacer esto es: no quiero perder rendimiento creando una nueva instancia de DecimalFormat
cada vez que necesito imprimir un número formateado.
Miré el código DecimalFormat.format(double)
y parece ser seguro para subprocesos, pero no estoy seguro.
¿Podría confirmar que el uso de DecimalFormat.format(double)
es finalmente seguro para hilos, cuando no cambia la configuración del formateador, o explica por qué no lo es?
A "workarround" es utilizar ThreadLocal, pero es es no es la pregunta. – Ralph
Otra solución es sincronizar en el objeto DecimalFormat en las conversiones. O bien (a) hace pocas conversiones y la sincronización no afectará mucho al rendimiento, o (b) realiza muchas conversiones, en cuyo caso los objetos DecimalFormat pueden reutilizarse para conversiones en el mismo subproceso, por lo tanto, sus costos de construcción deberían ser insignificantes. –