解決併發情況下的容器執行緒安全問題.
譬如: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 在程式中應盡量使用...