最近看Handler及Activity相關(guān)的文章丑瞧,多次碰到ThreadLocal這個(gè)類趾痘,該類實(shí)現(xiàn)了進(jìn)程內(nèi)線程間的通信擎颖,一直不理解榛斯,這個(gè)東西怎么能夠?qū)崿F(xiàn)線程間的通信的?所以就找資料研究了一下搂捧,發(fā)現(xiàn)它的設(shè)計(jì)還是挺簡(jiǎn)單的驮俗,但是完全理解它的用法,卻需要仁者見仁智者見智了允跑。
下面說下本人的一些小理解王凑,該類提供了線程安全的同步處理。這個(gè)線程安全是如何保證的呢聋丝?該類中維護(hù)著一個(gè)靜態(tài)內(nèi)部類ThreadLocalMap索烹,每個(gè)線程的調(diào)用都會(huì)被存到map中,并以調(diào)用的thread為key弱睦,所生成對(duì)象為value百姓。因?yàn)樵搈ap是一個(gè)靜態(tài)內(nèi)部類,所以我們即使創(chuàng)建多個(gè)該對(duì)象每篷,也只維護(hù)了一個(gè)ThreadLocalMap瓣戚,因此所有調(diào)用的線程共享這一個(gè)map端圈,我們可以通過該map來訪問到其他thread所持有的數(shù)據(jù)焦读。
我們?cè)谑褂肏andler的時(shí)候,都會(huì)接觸到Looper舱权,在Looper中就使用到了該類矗晃。每個(gè)Looper只能綁定一個(gè)線程,因此在使用Handler的線程中宴倍,我們可以同步的處理一些事情张症,而無需處理線程安全問題仓技。
參考鏈接:https://blog.csdn.net/lufeng20/article/details/24314381