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