threadlocal 的功能,能夠為各個訪問的執行緒copy出初始化後的資源副本,因此各個訪問資源的執行緒在改變資源狀態的時候,只是改變分配給該執行緒副本的狀態,因此各個執行緒之間沒有干擾,可以按照各自設定的序列執行。
對比**如下:
uniqueint與itest分別為兩個integer型別的資料。uniqueint應用了threadlocal。
執行緒t1與t2分別進行-1與+2操作。
如果沒有應用threadlocal的itest會因為兩個線層都在訪問,列印出可不**的結果,而uniqueint則在各自的執行緒中按照-1與+2的操作列印。
package threadlocal;
public class testthreadlocal
public void test1()
//threadlocal
private final threadlocaluniqueint =
new threadlocal()
};
//對比資料
private integer itest = new integer(0);
/*** 對全域性變數進行-1操作。
* @author
* */
class t1 extends thread}}
/*** 對全域性變數進行+2操作。
* @author
* */
class t2 extends thread
}}}
列印結果如下:
thread-1t2 uint:2
thread-0t1 uint :-1
thread-1t2 itest:1
thread-0t1 itest:1
thread-1t2 uint:4
thread-0t1 uint :-2
thread-1t2 itest:2
thread-0t1 itest:2
thread-1t2 uint:6
thread-0t1 uint :-3
thread-1t2 itest:3
thread-0t1 itest:3
thread-1t2 uint:8
thread-0t1 uint :-4
thread-1t2 itest:4
thread-0t1 itest:4
thread-1t2 uint:10
thread-0t1 uint :-5
thread-1t2 itest:5
thread-0t1 itest:5
thread-1t2 uint:12
thread-0t1 uint :-6
thread-1t2 itest:6
thread-0t1 itest:6
thread-1t2 uint:14
thread-0t1 uint :-7
thread-1t2 itest:7
thread-0t1 itest:7
thread-1t2 uint:16
thread-0t1 uint :-8
thread-1t2 itest:8
thread-0t1 itest:8
thread-1t2 uint:18
thread-0t1 uint :-9
thread-1t2 itest:9
thread-0t1 itest:9
thread-1t2 uint:20
thread-0t1 uint :-10
thread-1t2 itest:10
thread-0t1 itest:10
java併發程式設計實踐
chapter 2 執行緒安全 常見的競爭條件包括檢查在執行,讀 改 寫.典型的檢查再執行操作為延遲初始化 if is null then.典型的讀 改 寫操作為自增運算 x 動態同步方法鎖住當前物件本身,靜態同步方法鎖住class物件 chapter 2 可見性 讀讀不需要同步,讀寫,寫寫需要.當...
Java併發程式設計實踐(2)
1 同步容器類 hashmap和hashtable的區別 hashmap底層繼承abstractmap抽象類,並實現map介面,hashtable底層繼承dictionary類並實現map介面 hashmap初始話大小為16而hashtable初始化大小為11,hashmap是非執行緒安全的而has...
java併發程式設計實踐學習
1.futuretask有個簡單理解,但是例子不是非常懂,get 是返回結果,沒有結果的話阻塞,為什麼能處理耗時的計算操作呢?2.copyonwritearraylist究竟在什麼時候複製啊?2013 2 20 p294 清單14.3是什麼意思,先驗條件在 用到了 2013 2 21 p294 29...