【发布时间】:2015-03-05 08:45:23
【问题描述】:
为了使 NumberFormat 操作线程安全,我使用了 ThreadLocal 如下:
public class ThreadSafeNumberFormatter {
private static final ThreadLocal<NumberFormat> numberFormatHolder = new ThreadLocal<NumberFormat>() {
@Override
protected NumberFormat initialValue() {
return NumberFormat.getInstance();
}
};
public static NumberFormat getNumberFormatter() {
return numberFormatHolder.get();
}
}
但是当我使用 ThreadSafeNumberFormatter 时,setMaximumFractionDigits 不起作用:
NumberFormat FORMAT = ThreadSafeNumberFormatter.getNumberFormatter();
FORMAT.setMaximumFractionDigits(2);
如果我改用以下方法,效果很好:
NumberFormat FORMAT = NumberFormat.getNumberInstance();
FORMAT.setMaximumFractionDigits(2);
有谁知道我做错了什么以及如何解决它?
【问题讨论】:
-
NumberFormat.getInstance 我猜应该是 getNumberInstance
-
它适用于这个从你的代码构建的例子:ideone.com/MCYBZG你能发布一个完整的例子来重现你的错误吗?
-
我有代码 FORMAT.setMaximumFractionDigits(2);在静态块中。这就是错误所在。
标签: java multithreading thread-safety number-formatting thread-local