0

私はこの同様の質問を認識していますが、私のものは ThreadLocal クリーンアップの特定のケースに関するものです。

スレッド単位で状態を維持するために、(不明な) 数の ThreadLocal を静的な Vector に格納しています。「貪欲な」スレッドでは、使用可能な ThreadLocal がさらに必要になる場合があり、その結果、Vector のサイズが大きくなります。私のシナリオでは ThreadLocal.remove() を使用したクリーンアップは問題ではありませんが、貪欲なスレッドが終了した後、ベクトルのサイズを縮小することは可能でしょうか、それとも成長するだけに縛られているのでしょうか (またはせいぜい同じままでしょうか) )。

明確にするために:私の理解では、特定の ThreadLocal には、スレッドごとに異なるインスタンスが存在するということです。では、静的な Vector がスレッド A からアクセスされたときに、既存のすべてのスレッドで ThreadLocal T の値が空であることをどのように知ることができるでしょうか?

ご協力いただきありがとうございます

4

2 に答える 2

1

こちらの公式ドキュメントをご覧ください: Vector.trimToSize()

代わりに:Vector.setSize()

于 2013-03-13T13:11:09.177 に答える
0

あなたが達成しようとしているタスクは非論理的です。現在のスレッドからは、ThreadLocal が別のスレッドによって使用されているかどうか、およびそれを使用しているスレッドの数を知ることができません。ThreadLocals を WeakHashMap (または Guava のキャッシュ) と組み合わせることもできますが、それは非常に奇妙な解決策になります。ThreadLocals の成長を防ぐようにしてください。

于 2013-03-13T13:58:59.857 に答える