2016-07-26 92 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方法運行的代碼。