我可以ConcurrentHashMap<Thread, object>
存储线程的数据并用于Thread.currentThread()
检索它吗?我检查了 Java 源代码,发现它currentThread()
是原生的并且equals
没有被覆盖。
问问题
593 次
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
是的,你总是会得到相同的Thread
对象,所以你可以这样做。
但是,与其自己制作这样的表,不如考虑使用该ThreadLocal
功能,它本质上是做同样的事情,但具有特定的初始化语义。
于 2012-07-23T22:49:41.570 回答
1
您可以,但这种方法的问题是您正在创建对线程的硬引用,这意味着即使线程终止,它引用的对象也不会被 GC 收集。
于 2012-07-23T22:52:14.053 回答