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(); }}