總結(jié)
由于Thread中包含變量ThreadLocalMap乘寒,因此ThreadLocalMap與Thread的生命周期是一樣長望众,如果都沒有手動刪除對應(yīng)key,都會導(dǎo)致內(nèi)存泄漏伞辛。
但是使用弱引用可以多一層保障:弱引用ThreadLocal不會內(nèi)存泄漏烂翰,對應(yīng)的value在下一次ThreadLocalMap調(diào)用set(),get(),remove()的時候會被清除。
因此蚤氏,ThreadLocal內(nèi)存泄漏的根源是:由于ThreadLocalMap的生命周期跟Thread一樣長甘耿,如果沒有手動刪除對應(yīng)key就會導(dǎo)致內(nèi)存泄漏,而不是因為弱引用竿滨。
ThreadLocal正確的使用方法
每次使用完ThreadLocal都調(diào)用它的remove()方法清除數(shù)據(jù)將ThreadLocal變量定義成private static佳恬,這樣就一直存在ThreadLocal的強引用,也就能保證任何時候都能通過ThreadLocal的弱引用訪問到Entry的value值于游,進而清除掉 毁葱。
ThreadLocal