java併發程式設計實踐 ThreadLocal

2021-06-08 02:01:20 字數 1867 閱讀 4483

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...