我必須在許多線程中並行打印許多格式化的十進制值。要格式化小數值,我使用由模式配置的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