ThreadLocal 未在重载的线程构造函数中设置 属性
ThreadLocal not being property set in overloaded thread constructor
我有以下 classes
这个class用来保存我所有的ThreadLocal数据成员
public class ThreadLocalManager
{
public static final ThreadLocal<String> myThreadLocal = new ThreadLocal<String>();
}
下面class用来测试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();
}
}
}
}
这个class用来测试datameber是否设置正确
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");
时,我从 Liker
运行方法。但是如果我在 Test
运行 方法中调用 ThreadLocalManager.myThreadLocal.set("HI");
,Liker.run()
会打印 HI
我认为应该可以从所有 classes 和对象访问该值,只要它们来自同一线程。当我从构造函数调用它时,为什么值 HI
没有被存储?
您几乎在这里回答了您的问题 -
as long as they are from the same thread
Test
方法 运行 在不同线程中的构造函数,而不是 Test::run
方法中 运行 的代码。
我有以下 classes
这个class用来保存我所有的ThreadLocal数据成员
public class ThreadLocalManager
{
public static final ThreadLocal<String> myThreadLocal = new ThreadLocal<String>();
}
下面class用来测试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();
}
}
}
}
这个class用来测试datameber是否设置正确
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");
时,我从 Liker
运行方法。但是如果我在 Test
运行 方法中调用 ThreadLocalManager.myThreadLocal.set("HI");
,Liker.run()
会打印 HI
我认为应该可以从所有 classes 和对象访问该值,只要它们来自同一线程。当我从构造函数调用它时,为什么值 HI
没有被存储?
您几乎在这里回答了您的问题 -
as long as they are from the same thread
Test
方法 运行 在不同线程中的构造函数,而不是 Test::run
方法中 运行 的代码。