2017-09-23 7 views
0

私はスレッドをアプリケーションへの着信要求ごとに使用します。最初に、スレッドのコンストラクタにMDCクラスのフラグをSLF4Jに設定し、それをRunnableのrunメソッドで取得しましたが、値はnullでした。私は問題がMDCクラスに関連していたと思っていましたので、もともとThreadLocalの代わりにSLF4Jの代わりに可能でしたが、私は間違っていて、コードはまだ正しく動作していません。 私のコードは次のとおりです。ThreadLocal変数がThreadとRunnableの間でnullです

public class CustomThread extends Thread 
{ 
    public static  ThreadLocal<String> status = new ThreadLocal<String>(); 

    public CustomThread(CustomRunnable target) 
    { 
     super(target); 
     status.set("Start"); 
    } 
} 

public class CustomRunnable implements Runnable 
{ 
     public void run() 
     { 
       System.out.println(CustomThread.status.get()); 
     } 
} 

public static void main(String[] args) throws InterruptedException 
{ 
     CustomThread t1 = new CustomThread(new CustomRunnable()); 
     t1.start(); 
} 

と結果だった:

The flag is : null 

は私がしなければならない何か他のものはありますか?

答えて

0

ThreadLocalの値は、スレッドを設定したスレッドでのみ確認できます。あなたのコードでは、ThreadLocalをスレッドmainに設定し、それを別のトレッドのCustomThreadで読み込みます。

関連する問題