java併發程式設計 執行緒封閉

2021-08-18 09:35:54 字數 1035 閱讀 2510

執行緒封閉有三種方式:ad-hoc執行緒封閉、棧封閉、threadlocal類;其中ad-hoc執行緒封閉一般由程式設計師自己實現,很少用,暫不介紹。

將物件封閉在區域性變數中,只有區域性變數才能訪問,保證執行緒安全。

下面我們來看一段簡單的**

public

class

animals

}return numpairs;

}class

animal

}enum species

enum gender

class

animalpair

}class

speciesgendercomparator

implements

comparator }

class

ark }}

animals被封裝在乙個區域性變數treeset中,並將指向該物件的乙個引用儲存到animals,此時只有乙個引用指向animals,這個引用被封閉在區域性變數中,從而實現執行緒封閉。

每個執行緒獨有,避免變數共享;為每個執行緒建立乙個副本;

定義了乙個靜態內部類threadlocalmap,key存的是threadlocal例項本身,value存的是副本變數;這樣就達到了每個執行緒有單獨的副本變數,實現了變數隔離。threadlocalmap採用了雜湊表,不同於hashmap,主要不同之處在於hash衝突解決方案,hashmap當衝突時採用的是分離鍊錶法,就是採用鍊錶來儲存衝突的value;而threadlocalmap採用的是開放定址法,當衝突時會再次做hash運算,知道找到空餘的陣列,這樣做事因為threadlocalmap很少有hash衝突;

分離鍊錶法:

開放定址法

java併發之執行緒封閉

實現好的併發是一件困難的事情,所以很多時候我們都想躲避併發。避免併發最簡單的方法就是執行緒封閉。什麼是執行緒封閉呢?就是把物件封裝到乙個執行緒裡,只有這乙個執行緒能看到此物件。那麼這個物件就算不是執行緒安全的也不會出現任何安全問題。實現執行緒封閉有哪些方法呢?這是完全靠實現者控制的執行緒封閉,他的執...

(三)Java併發學習筆記 執行緒封閉

實現好的併發是一件困難的事情,所以很多時候我們都想躲避併發。避免併發最簡單的方法就是執行緒封閉。什麼是執行緒封閉呢?就是把物件封裝到乙個執行緒裡,只有這乙個執行緒能看到此物件。那麼這個物件就算不是執行緒安全的也不會出現任何安全問題。實現執行緒封閉有哪些方法呢?這是完全靠實現者控制的執行緒封閉,他的執...

java執行緒封閉

package com.ly.study.base 執行緒封閉示例 public class threadlocaltestclass start thread.sleep 5000l 等待所有執行緒執行結束 v value.get system.out.println 執行緒1執行之後,主線程取到...