ThreadLocal的两种用法总结
ThreadLocal的作用
ThreadLocal是一個(gè)線程內(nèi)部的數(shù)據(jù)存儲(chǔ)類,通過(guò)它可以在指定的線程中存儲(chǔ)數(shù)據(jù),數(shù)據(jù)存儲(chǔ)以后,只有在指定的線程中可以獲取到存儲(chǔ)的數(shù)據(jù),對(duì)于其他線程來(lái)說(shuō)則無(wú)法取到數(shù)據(jù)。
ThreadLocal的主要作用
輕松實(shí)現(xiàn)一些看起來(lái)很復(fù)雜的功能,適合以下一些應(yīng)用場(chǎng)景。
- 應(yīng)用場(chǎng)景1
某些數(shù)據(jù)是以線程為作用域并且不同線程具有不同的數(shù)據(jù)的副本時(shí),就可以考慮用ThreadLocal。
例如:Android中,Handler需要獲取當(dāng)前線程的Looper,很顯然Looper的作用域是線程并且不同線程具有不同的Looper。
通過(guò)ThreadLocal就可以輕松實(shí)現(xiàn)Looper在線程中的存取。
- 應(yīng)用場(chǎng)景2
復(fù)雜邏輯下的對(duì)象傳遞,比如監(jiān)聽(tīng)器的傳遞,有些時(shí)候一個(gè)線程中的任務(wù)過(guò)于復(fù)雜,我們又需要監(jiān)聽(tīng)器能夠貫穿整個(gè)線程的執(zhí)行過(guò)程。
采用ThreadLocal可以讓監(jiān)聽(tīng)器作為線程內(nèi)的全局對(duì)象而存在,在線程內(nèi)部只要通過(guò)get方法就可以獲取到監(jiān)聽(tīng)器。
ThreadLocal的兩個(gè)作用總結(jié)
- 1、讓某個(gè)需要用到的對(duì)象在線程間隔離(每個(gè)線程都有自己獨(dú)立的對(duì)象)
- 2、在任何方法中都可以輕松獲取到該對(duì)象
- 3、根據(jù)共享對(duì)象的生成時(shí)機(jī)不同,選擇initialValue或set來(lái)保存對(duì)象
場(chǎng)景一:initialValue
- 在ThreadLocal第一次get的時(shí)候把對(duì)象給初始化出來(lái),對(duì)象的初始化時(shí)機(jī)可以由我們控制
場(chǎng)景二:set
- 如果需要保存到ThreadLocal里的對(duì)象的生成時(shí)機(jī)不由我們隨意控制,例如攔截器生成的用戶信息,用ThreadLocal.set直接放到我們的ThreadLocal中去,以便后續(xù)使用
?
總結(jié)
以上是生活随笔為你收集整理的ThreadLocal的两种用法总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ThreadLocal的第二种用法 pa
- 下一篇: ThreadLocal的好处