gpt4 book ai didi

java - 使用 ThreadLocal 与 Atomic

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:59:42 26 4
gpt4 key购买 nike

根据 ThreadLocal 的 javadoc,它听起来像是一个用于 1+ 个原子字段的线程特定容器。

ThreadLocal 的目的是表示单个 Thread 的所有原子字段,还是当您有多个 Atomic 时,它只是提供一个方便的容器* 需要在逻辑上组合在一起的实例?

我想我想知道为什么我要使用 ThreadLocal 而不是 AtomicLongAtomicInteger?提前致谢!

最佳答案

ThreadLocal 的目的是字段不必必须是原子的——不需要将它们的值与集中式内存同步。它们是线程本地的,只存在于线程本地内存存储中。

Why would I ever want to use a ThreadLocal instead of, say, an AtomicLong or AtomicInteger?

ThreadLocal 对于存储某物的每线程副本非常有用。例如 SimpleDateFormat 不幸的是它是不可重入的。

private final ThreadLocal<DateFormat> threadLocal =
new ThreadLocal<DateFormat>() {
@Override
protected DateFormat initialValue() {
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSS");
}
};
...
// get one that is per-thread
DateFormat dateFormat = threadLocal.get();

这是一个有用的模式,因为这样我们就不必对其进行同步,也不必担心任何 volatile 或其他具有内存屏障的原子操作。

关于java - 使用 ThreadLocal 与 Atomic,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10357295/

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