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
值不被存储?
你是如何创建和使用Test对象的?请向我们展示一个完整的[mcve]。 –
@JohnKugelman我编辑了这个问题 – Arya