国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

理解ThreadLocal

2019-11-08 00:30:02
字體:
來源:轉載
供稿:網友

參考 正確理解TheadLocal 解密ThreadLocal JDK文檔 ThreadLocal

線程同步機制:

目的:解決多線程中相同變量的訪問沖突問題。 在同步機制中,通過對象的鎖機制保證同一時間只有一個線程訪問變量。這時該變量是多個線程共享的。 使用同步機制要求程序慎密地分析什么時候對變量進行讀寫,什么時候需要鎖定某個對象,什么時候釋放對象鎖等繁雜的問題。 經典案例:多生產者和多消費者。

ThreadLocal:

ThreadLocal的作用是提供線程內的局部變量,這種變量在線程的生命周期內起作用,減少同一個線程內多個函數或者組件之間一些公共變量的傳遞的復雜度。

ThreadLocal不是用來解決對象共享訪問問題的,而主要是提供了保持對象的方法和避免參數傳遞的方便的對象訪問方式。(ThreadLocalVariables可能更好理解點

個人理解:每個線程中各自用獨立的對象??梢院芊奖愕墨@取在本線程中存儲的對象,拍案驚奇?。?!應該要有一個ThreadLocalMananger,保持ThreadLocal為單例,在Handler機制里面Looper中為static final,被所有線程中Looper共享。

當某些數據是以線程為作用域并且不同線程具有不同的數據副本的時候,可以考慮采用ThreadLocal。

源碼

android中源碼ThreadLocal中。

Thread中持有TreadLocal.Values,每一個線程就有一個Values,所以每一個線程都有Object[]數組 table。通過數組角標來獲取該線程局部變量。//Sets the value of this variable for the current thread.//給當前線程設置數據(泛型T)public void set(T value) { Thread currentThread = Thread.currentThread(); //獲取當前Thread的Values Values values = values(currentThread); if (values == null) { values = initializeValues(currentThread); } //將T value存入Values中 values.put(this, value);//put()方法...}//獲取當前Thread.Values,是Thread的內部類,封裝數據用Values values(Thread current) { return current.localValues;}//Returns the value of this variable for the current thread.//get()方法,從當前Thread中獲取存儲的值public T get() { Thread currentThread = Thread.currentThread(); Values values = values(currentThread); if (values != null) { Object[] table = values.table; int index = hash & values.mask; if (this.reference == table[index]) { return (T) table[index + 1]; } }else { values = initializeValues(currentThread); } return (T) values.getAfterMiss(this);}Values initializeValues(Thread current) { return current.localValues = new Values();}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 图片| 平遥县| 贵溪市| 淮滨县| 台东市| 莆田市| 临武县| 连云港市| 米林县| 钦州市| 洪湖市| 贞丰县| 苍溪县| 巴青县| 博爱县| 淳安县| 建水县| 高唐县| 宜君县| 台州市| 扎囊县| 报价| 萝北县| 枝江市| 洪湖市| 印江| 玉环县| 信丰县| 雷山县| 江安县| 岳阳县| 广宁县| 滨州市| 澜沧| 吴江市| 类乌齐县| 澄城县| 双牌县| 呼伦贝尔市| 南召县| 肇庆市|