ThreadLocal <AtomicInteger>可能有用吗?

Rik*_*ing 10 java multithreading atomic

所以我看到有人试图ThreadLocal<AtomicInteger>在某些Java代码中使用 a .
现在,对于链接代码,这显然是无用的,以及导致请求被拒绝的其他问题.

而且它似乎永远是无用的:( AtomicInteger来自java.util.concurrent.atomic包)是为多线程访问而设计的,并且ThreadLocal使每个线程都有自己的值,所以为什么要使用呢?

我的问题是:是否存在任何ThreadLocal<AtomicInteger>有用的情况?

Mar*_*nik 6

是的,我们可能会提出一个合理的方案:

  1. 我们需要AtomicInteger在每个任务开始时使用一个线程局部实例;
  2. 我们继续在其他几个线程中分发这个对象,例如主任务线程分叉的子线程.

如果不评估出现这种情况的总体情况,我们无法判断.


Evg*_*eev 5

假设我们每个线程需要一个整数计数器。ThreadLocal 只能处理对象,所以逻辑上我们需要使用 int 包装器 - Integer

ThreadLocal<Integer> count = new ThreadLocal<>();
...
count.set(count.get() + 1);
Run Code Online (Sandbox Code Playgroud)

我们可以交替使用 AtomicInteger,不是因为它是线程安全的,而是因为它是可变的

ThreadLocal<AtomicInteger> count = new ThreadLocal<>();
...
count.get().incrementAndGet();
Run Code Online (Sandbox Code Playgroud)

版本 2 的性能比版本 1 好得多,这是一个真正的性能杀手