ThreadLocal DecimalFormat格式不正确

时间:2019-05-22 13:04:34

标签: java decimalformat thread-local

我在下面有一个ThreadLocal对象:

* def isActive = function(x){ var temp = karate.jsonPath(x, "$.blocks[?(@.block_status=='ACTIVE')]"); return temp.length == 3 }
* def response = { blocks: [{ block_status: 'ACTIVE' }, { block_status: 'ACTIVE' }, { block_status: 'ACTIVE' }] }
* def result = isActive(response)
* match result == true

当我在德语语言环境中运行 private static final ThreadLocal< DecimalFormat > formatter = new ThreadLocal< DecimalFormat >() { @Override protected DecimalFormat initialValue() { // n should be any number of decimals without having to specify them. return new DecimalFormat(); } }; 时,我得到:formatter.get.format(1234567),这不是我想要的。

我将ThreadLocal对象更改为:

123456,0

当我在德语语言环境中运行 private static final ThreadLocal< DecimalFormat > localisedDecimalFormatter = new ThreadLocal< DecimalFormat >() { public DecimalFormat get() { return new DecimalFormat(); } }; 时,会得到:formatter.get.format(1234567)正是我想要的。

使用DecimalFormat格式(123456)可以得到预期的值,但不是线程安全的

我的问题是,这是对ThreadLocal的不当使用吗?如果是这样,我如何在不使用不良编码实践的情况下使用它? (我知道我可以每次使用formatter.remove()来触发initialValue(),但不确定是否过大)

0 个答案:

没有答案