10

そのため、誰かがJava コードでaを使用しようとしているのを見ました。 さて、リンクされたコードの場合、リクエストが拒否される原因となった他の問題の中でも、これは明らかに役に立ちません。ThreadLocal<AtomicInteger>

そして、それは常に役に立たないようです: AtomicInteger(java.util.concurrent.atomic パッケージから) マルチスレッドアクセス用に設計されておりThreadLocal、各スレッドに独自の値を持たせるのに、なぜそれを使用するのでしょうか?

私の質問は次のとおりです。 aが役立つ状況はありますか?ThreadLocal<AtomicInteger>

4

3 に答える 3

6

はい、正当なシナリオを思いつくかもしれません:

  1. AtomicInteger各タスクの開始時に のスレッドローカル インスタンスが必要です。
  2. このオブジェクトを他のいくつかのスレッド (たとえば、メイン タスク スレッドによってフォークされた子スレッド) に分散します。

これが現れる文脈全体を評価しなければ、判断することはできません。

于 2013-06-05T07:19:31.417 に答える
1

にはエキゾチックな理由しかないと思いますThreadLocal<AtomicInteger>ThreadLocalへの参照が だけではないためAtomicInteger、より多くのスレッドがアクセスできる場合があります。そういうときは、デザインをよく見たほうがいいと思います…。

のスレッドセーフが必要ではなくAtomicInteger、その可変性だけが必要な場合は、 int[]. AtomicInteger完全な制御と組み合わせると、オーバーヘッドが少なくなります。

ThreadLocal<int[]> count = new ThreadLocal<>();
...
count.set(new int[1]);
...
count.get()[0] = 42;
...
count.get()[0] += 4711;
于 2013-11-08T09:14:54.120 に答える