「如果没有先set的话,即在map中查找不到对应的存储,则会通过调用setInitialValue方法返回i,而在setInitialValue方法中,有一个语句是T value = initialValue(), 而默认情况下,initialValue方法返回的是null。」
你自己在结论里都写了,没set直接get找不到会返回null,这个是不会报空指针。至于你demo报空指针的原因是,你get返回的null作为Long类型拆箱转long类型的时候,调用
null.longValue() 这才是你空指针的原因,跟ThreadLocal啥的没关系。
总结就是:
1、ThreadLocal在get之前不set不会空指针;
2、java自动拆箱实际是调用了对象的方法将封装类型转为基本类型,只要是对象调用方法,就需要预防空指针。
ThreadLocal作用、场景、原理1.ThreadLocal 是什么? 在JDK 1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的...