在java中,我有一个像
这样的类结构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();
}
}
据我了解ThreadLocal的概念,每个线程都有自己的myB threadLocal对象。
让我们假设A被多个线程使用(如main()中所示)。
鉴于我只实例化一次A,何时为每个线程创建myB成员?
答案 0 :(得分:1)
第一次线程调用get
的{{1}}方法时,会调用您定义的ThreadLocal
方法,从而创建一个新的initialValue()
实例。
答案 1 :(得分:0)
不会多次创建myB
。如果可以myB.get()
,则会调用initialValue()
来获取新值,如果该线程尚未set
。