Java ThreadLocal成员何时初始化?
在java中,我有一个类结构,如Java ThreadLocal成员何时初始化?,java,multithreading,Java,Multithreading,在java中,我有一个类结构,如 class A{ ThreadLocal<B> myB; public A(){ myB = new ThreadLocal<B>(){ protected B initialValue(){ return new B(); } }; } static class B{ } public static v
class A{
ThreadLocal<B> myB;
public A(){
myB = new ThreadLocal<B>(){
protected B initialValue(){
return new B();
}
};
}
static class B{
}
public static void main(String[] args){
A a = new A();
for(int i=0;i<2;i++)
new Thread(a).start();
}
}
A类{
本地myB;
公共A(){
myB=新线程本地(){
受保护的B初始值(){
返回新的B();
}
};
}
静态B类{
}
公共静态void main(字符串[]args){
A=新的A();
对于(int i=0;i它不是多次创建的myB
。当您可以myB.get()
时,您的初始值()如果尚未为该线程设置值,则将调用以获取新值。线程第一次调用ThreadLocal
的get
方法时,initialValue()
调用了您定义的方法,从而创建了一个新的B
实例。可能您不太了解它rescue@Raffaele:是的,我没有!:)现在更有意义了!谢谢!您的示例搞乱了:它有一个从未分配的ThreadLocal myB。构造函数创建了一个新的ThreadLocal B,但对此不做任何处理。您的构造函数中的B应该是myB吗?在哪里调用了get()
或set()
thread local value?@jameslarge:是的,这是一个输入错误!谢谢!:)获取集的调用在run()方法中,我没有显示该方法…无论如何,谢谢!谢谢!快速回复…:)谢谢,即时回复!:)