public class ThreadLocalNPE {
ThreadLocal<Long> longThreadLocal = new ThreadLocal<Long>();
public void set() {
longThreadLocal.set(Thread.currentThread().getId());
}
/**
* set之前使用get方法时,get正常情况下返回null,但是直接抛出空指针异常了,原因是Long是包装类型,long是基本类型,在进行类型转换报了错
* 而不是get方法的原因。
* 解决方式是:将返回值 long改为Long
* @return
*/
public Long get() {
return longThreadLocal.get();
}
public static void main(String[] args) {
ThreadLocalNPE threadLocalNPE = new ThreadLocalNPE();
System.out.println(threadLocalNPE.get());
Thread thread = new Thread(() -> {
threadLocalNPE.set();
System.out.println(threadLocalNPE.get());
});
thread.start();
}
}