0

ConcurrentHashMap<Thread, object>スレッドのデータを保存し、それを取得するために使用できますThread.currentThread()か? Java ソースを調べたところ、currentThread()ネイティブであり、equals上書きされていないことがわかりました。

4

3 に答える 3

4

できますが、その目的のためにThreadLocalメカニズムが組み込まれています。それを再発明する唯一の理由は、それらを操作するために「所有者」以外のスレッドからそれらの値にアクセスする必要がある場合です。

  ThreadLocal<Object> data = new ThreadLocal<Object>();

  public Object getData() {
      return this.data.get();
  }

  public void setData(Object data) {
      this.data.set(data);
  }

すべてのスレッドの初期値は null ですが、デフォルト値を指定できることに注意してください。

  ThreadLocal<Object> data = new ThreadLocal<Object>() {
      protected Object initialValue() { return "foo"; }
  };
于 2012-07-23T22:49:46.723 に答える
1

できますが、このアプローチの問題は、スレッドへのハード参照を作成していることです。つまり、スレッドが終了しても、スレッドが参照するオブジェクトは GC によって収集されません。

于 2012-07-23T22:52:14.053 に答える
1

はい、常に同じThreadオブジェクトを取得するので、これを行うことができます。

ただし、そのようなテーブルを自分で作成するのではなく、ThreadLocal基本的に同じことを行う機能を使用することを検討してください。

于 2012-07-23T22:49:41.570 に答える