2012-07-23 33 views

回答

3

你可以,但有一个内置的机制ThreadLocal只是为了这个目的。重新创建它的唯一原因是,如果您还需要从其“主人”以外的某个线程访问这些值,以便操纵它们。

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

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

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

注意,对于每个线程的初始值是空的,但你可以提供的默认值:

ThreadLocal<Object> data = new ThreadLocal<Object>() { 
     protected Object initialValue() { return "foo"; } 
    }; 
1

是的,你总是会得到相同的Thread对象,所以你可以这样做。

尽管如此,您可以考虑使用ThreadLocal功能,它本质上是做同样的事情,但是具有特定的初始化语义。

1

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

相关问题