我在下面有一个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(),但不确定是否过大)