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