我只使用java.text.NumberFormat将数字转换为更易读的字符串,用逗号分隔数千个等等.基本上我将其定义为:
public static NumberFormat nf = NumberFormat.getInstance(Locale.US);
Run Code Online (Sandbox Code Playgroud)
...然后我在任何线程中调用nf.format(some_number),我想在其中创建一个数字的可读版本.但是看看JavaDoc,它说:"数字格式通常不同步.建议为每个线程创建单独的格式实例.如果多个线程同时访问一个格式,它必须在外部同步."
如果我只使用NumberFormat对象的格式(数字)方法,是否会出现同步问题?我尝试使用NumberFormat.getInstance(Locale.US).format(number),但是每次我觉得可能不需要时,都会产生相关的开销.这真的需要外部同步吗?或者,如果没有NumberFormat,是否有更简单有效的方法来完成同样的事情?
谢谢!
Ada*_*ume 21
即使格式是您调用的唯一方法,它仍然不是线程安全的.事实上,由于这个原因,我们在工作中遇到了错误.我们通常会动态创建NumberFormat对象,或者使用Gerco建议的ThreadLocal.如果你想得到想象,你可以继承NumberFormat并在format方法中,在委托NumberFormat上调用format之前进行同步,或者使用ThreadLocal来检索委托.
但是,我认为最简单的方法,特别是如果你要连续格式化/解析几个数字,就是手动使用ThreadLocal.
| 归档时间: |
|
| 查看次数: |
10941 次 |
| 最近记录: |