【问题标题】:setMaximumFractionDigits is not working for ThreadLocal<NumberFormat>setMaximumFractionDigits 不适用于 ThreadLocal<NumberFormat>
【发布时间】: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


【解决方案1】:

我的猜测是您将它设置在一个线程中并尝试在另一个线程中读取它。那显然行不通。如果没有更多的例子,我们真的无法判断。

【讨论】:

    猜你喜欢
    • 2012-12-25
    • 1970-01-01
    • 1970-01-01
    • 2020-08-06
    • 1970-01-01
    • 2014-08-03
    • 2022-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多