线程局部变量为空

Abh*_*bhi 1 java multithreading thread-local

我试图通过线程执行在 run 方法中打印线程局部变量,但它显然为空。请查找代码获取信息---

public class EvenAndOdd implements Runnable{

public EvenAndOdd() {

}

public  static void setThreadContext(){
 threadLocal.set(3);
 eventhreadLocal.set(2);
}
 private static ThreadLocal<Integer> threadLocal = new ThreadLocal<Integer>();
 private static ThreadLocal<Integer> eventhreadLocal = new ThreadLocal<Integer>(); 

@Override
public void run() {
    System.out.println(threadLocal.get());
    System.out.println(eventhreadLocal.get());
}

}
Run Code Online (Sandbox Code Playgroud)

// 现在是用于创建线程并调用 run 方法的类

public class PrintNumber {
public static void main(String[] args) {

    EvenAndOdd evenAndOdd =new EvenAndOdd();
    EvenAndOdd.setThreadContext();
    Thread printThread = new Thread(evenAndOdd);
    printThread.start();

}
}
Run Code Online (Sandbox Code Playgroud)

问题陈述 --- 线程的执行给了我 null 而不是 2 和 3

Mar*_*nik 6

您正在观察的行为是整个要点ThreadLocal:您在一个线程中设置的内容在另一个线程中是不可见的。ThreadLocal您必须在使用这些值的线程内设置这些值。