Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ThreadLocal成员何时初始化?_Java_Multithreading - Fatal编程技术网

Java ThreadLocal成员何时初始化?

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

在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();
    }
}
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()方法中,我没有显示该方法…无论如何,谢谢!谢谢!快速回复…:)谢谢,即时回复!:)