(1)ThreadLocalはシェア変数の問題を解決します

1. ThreadLocalの概要                              

    「水はボートを運ぶことができる、それはボートを上書きすることもできる」とスレッドローカルが最も適切であると説明している。元々の目的はスレッドが並行しているときの変数共有の問題を解決することであるが、弱い参照やハッシュの衝突などの過度の設計により、理解するのは難しい、使用コストが高いが、障害の発生率が高くなり、メモリリーク、ダーティデータ、共有オブジェクトの更新などの問題が発生しやすくなる。多分それはシェア変数の問題をカバーすると思いますが、それはそうではありません。メモリモデル、弱参照、ハッシュアルゴリズムの観点からの次の分析:

2. ThreadLocalアプリケーションのシナリオ

ThreadLocalの使用場所について説明する前に、スレッドが1つしかない場合はThreadLocalについて説明する必要がないことを明確にしておきます。ThreadLocalはマルチスレッドシナリオで使用されます。

ThreadLocalは、次の2種類の用途に要約されています。

  • スレッドのコンテキスト情報を保存し、必要な場所で取得できます 

  • スレッドセーフ。特定の状況を回避するには、スレッドセーフによるパフォーマンスの低下を考慮する必要があります。 

1.参照タイプの概要

    オブジェクトがヒープ上に作成された後に保持される参照は実際には変数型であり、参照チェーンは、参照間に値を割り当てることによって形成できます。GCルートから反復して、参照が到達可能かどうかを判断します。参照の到達可能性は、ガベージコレクションが可能かどうかを判断するための基本的な条件です。ガベージコレクションのステージは、参照型のセマンティクスの強さに応じて決定できます。

  1. 強い参照(強い参照): Object object = new Object();このような変数の宣言と定義は、オブジェクトへの強い参照を生成します。オブジェクトに強力な参照ポイントがあり、GCルートに到達できる限り、Javaメモリが解放されると、メモリが枯渇寸前であっても、オブジェクトは解放されません。
  2. ソフトリファレンス:非必須オブジェクトのシーンで使用されるソフトリファレンスとウィークリファレンス。OOMのに、ガベージコレクターはこれらの参照が指すオブジェクトをコレクション範囲に追加して取得します

おすすめ

転載: blog.csdn.net/qq_41893274/article/details/105245459