setMaximumFractionDigits不适用于ThreadLocal <numberformat> </numberformat>

时间:2015-01-07 12:40:15

标签: java multithreading thread-safety number-formatting thread-local

为了使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);

有谁知道我做错了什么以及如何解决?

1 个答案:

答案 0 :(得分:0)

我的猜测是你在一个线程中设置它并尝试在另一个线程中读取它。这显然不会奏效。我们不能在没有更多例子的情况下告诉我们。