DecimalFormat.format(double) in different threads
java, multithreading, thread-safety
Solution
While the current implementation may be eventually thread-safe, there is no such guarantee for coming implementations, or for other JREs.
Have you verified that avoiding `new DecimalFormat()` is a measurable performance gain in your application?
Problem
I have to print many formatted decimal values in many threads in parallel. To format the decimal values I use a `java.text.DecimalFormat` configured by a pattern. I am aware of the warning from the java doc of `DecimalFormat`: Decimal formats are generally not synchronized. It is recommended to create separate format instances for each thread. If multiple threads access a format concurrently, it must be synchronized externally. But I don’t know if this warning applies to my scenario: I configure the `java.text.DecimalFormat` once when the application starts (and store the `Formatter` in a final field). After that I ONLY use the `format(double)` method. The reason why I want to do this is: I don’t want to lose performance by creating a new `DecimalFormat` instance every time I need to print a formatted number. I looked at the `DecimalFormat.format(double)` code and it looks to be thread safe, but I am not sure. Could you please confirm that the usage of `DecimalFormat.format(double)` is eventually thread safe, when not changing the configuration of the formatter, or explain why it is not?