2017-09-23 3 views
0

스레드을 응용 프로그램에 대한 각 요청에 사용합니다. 처음에 Thread의 생성자에 MDC 클래스의 플래그를 SLF4J으로 설정하고 Runnable의 run 메소드에서 가져 왔지만 값은 null입니다. 나는 문제가 MDC 클래스와 관련이있어서 원래 사용하려고 했으므로 스레드 로컬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을 설정하고 다른 트레드 인 CustomThread에서 읽습니다.