我必须在许多线程中并行打印许多格式化的十进制值。要格式化小数值,我使用由模式配置的java.text.DecimalFormat
。 我知道从DecimalFormat
的Java文档的警告:DecimalFormat.format(double)in different threads
十进制格式一般都不会 同步。建议 为每个线程创建 的单独格式实例。如果多个线程 同时访问格式,则必须在外部同步 。
但我不知道这是否警告适用于我的情况:我 配置java.text.DecimalFormat
一旦应用程序启动时(并存储Formatter
在最终场)。之后我只使用format(double)
方法。
我想这样做的原因是:我不想通过每次需要打印格式化数字时创建新的DecimalFormat
实例来损失性能。
我看着DecimalFormat.format(double)
的代码,它看起来是线程安全的,但我不确定。
请不要更改格式化程序的配置,或者解释为什么不是格式化程序时,请确认DecimalFormat.format(double)
的使用最终是线程安全的吗?
A “workarround” 是使用ThreadLocal的,但是是不是问题。 – Ralph 2010-12-08 12:02:39
另一个解决方法是在转换上的DecimalFormat对象上进行同步。 (a)你做了很少的转换,并且同步不会对性能产生太大影响,或者(b)你做了很多转换,在这种情况下,DecimalFormat对象可能会在同一线程中被重复用于转换,因此它们的构建成本应该可以忽略不计。 – 2010-12-08 12:38:53