我們該怎麼回答呢????你也可以思考下,下面看看小編的思考;
- ThreadLocal用在什麼地方?
- ThreadLocal一些細節!
- ThreadLocal的最佳實踐!
- 思考
ThreadLocal用在什麼地方?
討論ThreadLocal用在什麼地方前,我們先明確下,如果僅僅就一個線程,那麼都不用談ThreadLocal的,ThreadLocal是用在多線程的場景的!!!
ThreadLocal歸納下來就2類用途:
- 保存線程上下文信息,在任意需要的地方可以獲取!!!
- 線程安全的,避免某些情況需要考慮線程安全必須同步帶來的性能損失!!!
保存線程上下文信息,在任意需要的地方可以獲取!!!
由於ThreadLocal的特性,同一線程在某地方進行設置,在隨後的任意地方都可以獲取到。從而可以用來保存線程上下文信息。
常用的比如每個請求怎麼把一串後續關聯起來,就可以用ThreadLocal進行set,在後續的任意需要記錄日誌的方法裡面進行get獲取到請求id,從而把整個請求串起來。
還有比如Spring的事務管理,用ThreadLocal存儲Connection,從而各個DAO可以獲取同一Connection,可以進行事務回滾,提交等操作。
備註:ThreadLocal的這種用處,很多時候是用在一些優秀的框架裡面的,一般我們很少接觸,反而下面的場景我們接觸的更多一些!
線程安全的,避免某些情況需要考慮線程安全必須同步帶來的性能損失!!!
ThreadLocal為解決多線程程序的並發問題提供了一種新的思路。但是ThreadLocal也有侷限性,我們來看看阿里規範: