スレッドローカルの仕組みは何ですか
ThreadLocalの仕組みは、データをスレッドのThreadLocalMapに保存するもので、ThreadLocalMapはThreadLocalクラスの内部クラスで、スレッドのローカル変数を保存するために使われます。各スレッドは独自のThreadLocalMapオブジェクトを持ち、ThreadLocalオブジェクトを介して、現在のスレッドのThreadLocalMapを取得できます。
ThreadLocalオブジェクトのsetメソッドで値をセットすると、実際にはカレントスレッドのThreadLocalMapにThreadLocalオブジェクトをキーに、値をvalueとして保存されます。ThreadLocalオブジェクトのgetメソッドで値を取得すると、実際にはカレントスレッドのThreadLocalMapからThreadLocalオブジェクトをキーにして対応する値を取得します。
スレッド間で独立しているため、各スレッドのThreadLocalMapは相互に孤立しており、干渉しません。各スレッドはThreadLocalMapに格納した値のみを取得でき、他のスレッドの値にはアクセスできません。これによりスレッド間でのデータの安全性が確保されます。
また、メモリーリークを避けるために、ThreadLocal内では、ThreadLocalオブジェクトへの参照に弱参照を使用しており、外部からThreadLocalオブジェクトに対する強参照が消えると、ガベージコレクタによって回収されるため、同時にThreadLocalMap内の値も削除され、メモリーリークが発生しない仕組みになっている。