2016-07-26 55 views
0

我有以下类ThreadLocal的不是财产重载线程构造函数中设置

这个类是用来保持我所有的ThreadLocal的数据成员

public class ThreadLocalManager 
{ 
    public static final ThreadLocal<String> myThreadLocal = new ThreadLocal<String>(); 
} 

下面的类是用来测试的ThreadLocal

public class Test extends Common implements Runnable 
{ 
    public Test(String country, String machine) 
    { 
     Common.machine = machine; 
     Common.country = country; 
     ThreadLocalManager.myThreadLocal.set("HI"); 
    } 

    @Override 
    public void run() 
    { 
     while (true) 
     { 
      try 
      { 
       Liker liker = new Liker(); 
       liker.run(); 
      } 
     } 
    } 
} 

本课程用于测试数据文件是否正确设置

public class Liker 
{ 
    public void run() 
    { 
     System.out.println((String) ThreadLocalManager.myThreadLocal.get()); 
    } 
} 

编辑

这是我的主题是如何创建的

Thread newThread = new Thread(new Test(country, machine)); 
newThread.start(); 

有一件事我感到困惑的是,正如上述,当我在Test构造函数中调用ThreadLocalManager.myThreadLocal.set("HI");,我得到null从运行方法为Liker。但是,如果我在Test run方法调用ThreadLocalManager.myThreadLocal.set("HI");Liker.run()打印HI

我认为值应该是所有类都可以访问,并且只要它们是在同一个线程对象。当我从构造函数中调用它时,为什么HI值不被存储?

+0

你是如何创建和使用Test对象的?请向我们展示一个完整的[mcve]。 –

+0

@JohnKugelman我编辑了这个问题 – Arya

回答

1

你几乎回答了你的问题在这里 - 只要它们是在同一个线程

构造在不同的线程Test方法运行

,比内Test::run方法运行的代码。