この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 27855|答える: 1

[出典] Java ThreadLocalの原則とマルチスレッドの再利用はデータの混雑を招きます

[リンクをコピー]
掲載地 2021/11/01 11:45:36 | | | |
プログラミングでは、変数の内容を渡すメソッドパラメータを定義します。実行メソッドレベルが深い場合、各メソッドはパスするパラメータを定義する必要があります。この時点で、すべてのメソッドが同じスレッド上で実行されていれば、ThreadLocalの値を設定して読み取ることができます。

ThreadLocal クラスはスレッド内のローカル変数を提供するために使用されます。 これらの変数がマルチスレッド環境でアクセス(get/set)される場合、各スレッドの変数は他のスレッドの変数から比較的独立しています。

ThreadLocalはセットメソッドを実行する際にまず現在のスレッド(Thread t = Thread.currentThread())を取得し、現在のスレッドを使ってThreadLocalMapを取得します。マップが空でなければ、現在のスレッドに以前にバインドされたマップがあることを意味します。そのマップの値を更新します。そうでなければ、自身をキーとして割り当ててその値をマップに配置し、変数とスレッドのバインディングを実現します。



コードをテストし、スレッドプールを最大5スレッドに設定し、マルチスレッドの場合にThreadLocal getメソッドを呼び出すと、ThreadLocalデータ(他のスレッドによって設定されたデータ)、私たち現在のスレッドではThreadLocalセットメソッドが呼び出されてデータを設定することはありません、下図に示されているように:



エラーの原因:スレッドが再利用されると、ThreadLocalから最初に得られた値は、他のスレッドの残り値である可能性が高いです

なぜなら、現在のスレッドでThreadLocalを終えた後、迅速な削除を依頼して削除してください。 以下に示すように:



コード:

(終わり)





先の:Dockerはコンテナの再起動設定や一括停止コンテナを調べます
次に:ジェンキンス(5)プロジェクトグループの発表
掲載地 2021/11/02 21:30:12 |
また学びに来た。
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com