「如果沒有先set的話,即在map中查找不到對應的存儲,則會通過調用setInitialValue方法返回i,而在setInitialValue方法中,有一個語句是T value = initialValue(), 而默認情況下,initialValue方法返回的是null?!?br>你自己在結論里都寫了,沒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為解決多線程程序的并發(fā)問題提供了一種新的...