1. public class ThreadLocalNPE {
    2. ThreadLocal<Long> longThreadLocal = new ThreadLocal<Long>();
    3. public void set() {
    4. longThreadLocal.set(Thread.currentThread().getId());
    5. }
    6. /**
    7. * set之前使用get方法时,get正常情况下返回null,但是直接抛出空指针异常了,原因是Long是包装类型,long是基本类型,在进行类型转换报了错
    8. * 而不是get方法的原因。
    9. * 解决方式是:将返回值 long改为Long
    10. * @return
    11. */
    12. public Long get() {
    13. return longThreadLocal.get();
    14. }
    15. public static void main(String[] args) {
    16. ThreadLocalNPE threadLocalNPE = new ThreadLocalNPE();
    17. System.out.println(threadLocalNPE.get());
    18. Thread thread = new Thread(() -> {
    19. threadLocalNPE.set();
    20. System.out.println(threadLocalNPE.get());
    21. });
    22. thread.start();
    23. }
    24. }