gpt4 book ai didi

java - 不同线程中的 DecimalFormat.format(double)

转载 作者:IT老高 更新时间:2023-10-28 21:14:19 24 4
gpt4 key购买 nike

我必须在许多线程中并行打印许多格式化的十进制值。要格式化十进制值,我使用 java.text.DecimalFormat由模式配置。我知道来自 DecimalFormat 的 java 文档的警告。 :

Decimal formats are generally not synchronized. It is recommended to create separate format instances for each thread. If multiple threads access a format concurrently, it must be synchronized externally.

但我不知道这个警告是否适用于我的场景:我配置java.text.DecimalFormat应用程序启动时一次(并将 Formatter 存储在最终字段中)。之后我只使用 format(double)方法。

我想这样做的原因是:我不想通过创建一个新的 DecimalFormat 来损失性能。每次我需要打印格式化数字时的实例。

我看了DecimalFormat.format(double)代码,它看起来是线程安全的,但我不确定。

您能否确认一下 DecimalFormat.format(double) 的用法?当不更改格式化程序的配置时,最终是线程安全的,或者解释为什么不这样做?

最佳答案

只需将此线程安全代码段用于 NumberFormat:

static ThreadLocal<NumberFormat> numberFormat = new ThreadLocal<NumberFormat>() {
@Override
public NumberFormat initialValue() {
return new DecimalFormat("00000");
}
};

或者在 Java 8 中,正如 Jesper 在评论中所说:

private static ThreadLocal<NumberFormat> numberFormatter = 
ThreadLocal.withInitial(() -> new DecimalFormat("00000"));

关于java - 不同线程中的 DecimalFormat.format(double),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4387170/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com