Thread.currentThread()总是返回相同的实例吗?

时间:2012-07-23 22:46:34

标签: java multithreading map

我可以让ConcurrentHashMap<Thread, object>存储一个帖子的数据并使用Thread.currentThread()来检索它吗?我检查了Java源代码,发现currentThread()是原生的,equals没有被覆盖。

3 个答案:

答案 0 :(得分:3)

你可以,但有一个内置机制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"; }
  };

答案 1 :(得分:1)

是的,您将始终获得相同的Thread对象,因此您可以执行此操作。

不是自己制作这样的表,而是考虑使用ThreadLocal功能,它本质上做同样的事情,但具有特定的初始化语义。

答案 2 :(得分:1)

你可以但这种方法的问题是你正在创建一个对线程的硬引用,这意味着即使线程被终止,它引用的对象也不会被GC收集。