併發程式設計9 併發容器

2021-09-25 18:24:31 字數 1938 閱讀 7754

解決併發情況下的容器執行緒安全問題.

譬如:vector,hashtable,都是給予同步鎖實現的.

concurrent包下的類,大部分都是使用系統底層的實現,類似於native;

public class test09 

latch.countdown();

}});

}for(thread t : arr)

try catch (interruptedexception e)

long end = system.currenttimemillis();

system.out.println("執行時間為:"+ (end-begin)+"毫秒");

}}

執行時間為:72431毫秒
public class test10 

latch.countdown();

});}

for(thread t : arr)

try catch (interruptedexception e)

long end = system.currenttimemillis();

system.out.println("執行時間為:"+ (end-begin)+"毫秒");

}}

寫:

add(e e):如果佇列已滿,則丟擲異常;

put(e e):向佇列尾部新增元素,佇列已滿的時候,阻塞等待。對應讀方法take

offer(e e):向佇列尾部新增元素,佇列已滿的時候,直接返回false。

remove(): 移除並返回佇列頭部的元素,如果佇列已空,則丟擲nosuchelementexception異常.

element():返回佇列頭部的元素,如果隊列為空.則丟擲nosuchelementexception異常.

poll():移除並返回佇列頭部的元素,如果隊列為空,則返回null;

peek():返回佇列頭部的元素,如果隊列為空,則返回null;

take():移除並返回佇列頭部的元素,如果隊列為空則阻塞;

有界阻塞

單元素synchronousqueue

synchronousqueue的特點是只能容納乙個元素,同時synchronousqueue使用了兩種模式來管理元素,一種是使用先進先出的佇列,一種是使用後進先出的棧,使用哪種模式可以通過建構函式來指定。

無界阻塞佇列

public class delaydemo implements delayed 

@override

public long getdelay(timeunit unit)

@override

public int compareto(delayed o)

public long getexpire()

public void setexpire(long expire)

}

public class delaydemo implements delayed 

@override

public long getdelay(timeunit unit)

@override

public int compareto(delayed o)

public long getexpire()

public void setexpire(long expire)

}

concurrentlinkedqueue

是乙個基於鏈結節點的無界線程安全佇列,它採用先進先出的規則對節點進行排序,當我們新增乙個元素的時候,它會新增到佇列的尾部;當我們獲取乙個元素時,它會返回佇列頭部的元素。

注意:

java併發程式設計容器

1.concurrenthashmap 雖然hashtable執行緒安全,但是多執行緒訪問 時同一時間只能有乙個執行緒訪問,效率不高,concurrenthashmap引入了乙個 分段鎖 的概念,具體可以理解為把乙個大的map拆分成n個小的hashtable,根據key.hashcode 來決定把k...

併發程式設計核心 十二 併發類容器

jdk 5.0 以後提供了多種併發類容器來替代同步類容器從而改善效能。同步類容器的 狀態都是序列化的。他們雖然實現了執行緒安全,但是嚴重降低了併發性,在多執行緒環境時,嚴重降低了應用程式的吞吐量。併發類容器是專門針對併發設計的,使用 concurrenthashmap 來代替給予雜湊的傳 統的 ha...

《Java併發程式設計實戰》 9

哲學家問題 通過鎖順序來避免死鎖 如果在持有鎖時呼叫某個外部方法,那麼將出現活躍性問題。在這個外部方法中可能會獲取其他鎖 這可能會產生死鎖 或者阻塞時間過長,導致其他執行緒無法及時獲得當前被持有的鎖。如果在呼叫某個方法時不需要持有鎖,那麼這種呼叫被稱為開放呼叫 open call 在程式中應盡量使用...