java - setMaximumFractionDigits不适用于ThreadLocal <NumberFormat>

标签 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);

有人知道我在做什么错以及如何解决吗?

最佳答案

我的猜测是您正在一个线程中设置它,并试图在另一个线程中读取它。那显然是行不通的。没有更多的例子,我们真的无法说出来。

关于java - setMaximumFractionDigits不适用于ThreadLocal <NumberFormat>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27819748/

相关文章:

java - Jetty9 - Jetty 不是从单独的 {jetty.base} 运行

python - 主线程退出后如何让守护线程保持事件状态?

java - 如何重现代码规范中提到的多线程错误?(TSM03-J。不要发布部分初始化的对象)

c - 在 OpenMP 的 C 语言中使函数线程安全

java - 通过 JSch shell channel 向服务器发送命令

java - List<Object[]> 和 List<Object> 之间有什么区别?

java - 创建静态字段时出错

python - Python可以在并行线程中解码JSON吗?

java - 有没有一种安全正确的方法来使用Java语言杀死Windows中的进程树

java - 非同步 WeakHashMap 有害吗?