Javaでプログラミングしてからしばらく経ちましたが、理論を一新したいと思います。
独自のThreadLocalを最初から実装するにはどうすればよいですか?
Javaでプログラミングしてからしばらく経ちましたが、理論を一新したいと思います。
独自のThreadLocalを最初から実装するにはどうすればよいですか?
はい。スレッドをサブクラス化し、スレッドのソースに実装をコピーできます。または、コードを読むだけでも、ThreadLocalを正しく取得するのは難しいです。
トリッキーな要素はたくさんありますが、最も明白なのは、削除されていないスレッドからのメモリリークを防ぐことです。
既存の実装でさえ、サブクラス化されたThreadLocalオブジェクトがClassLoaderのアンロードを妨げる可能性があるという問題に悩まされています。
これを試してみてください:
new Thread()
{
//contents
}.start();
これは、コード内のどこにでもスポーンできます。
この質問は重複していることがわかりました:
これは非常に単純で、実際には、各 Thread オブジェクト内に格納された名前と値のペアの単なる Map です (Thread.threadLocals フィールドを参照)。API はその実装の詳細を隠しますが、多かれ少なかれそれだけです。