ThreadLocal成员何时初始化?

时间:2014-10-18 15:54:27

标签: 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 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成员?

2 个答案:

答案 0 :(得分:1)

第一次线程调用get的{​​{1}}方法时,会调用您定义的ThreadLocal方法,从而创建一个新的initialValue()实例。

答案 1 :(得分:0)

不会多次创建myB。如果可以myB.get(),则会调用initialValue()来获取新值,如果该线程尚未set