1.arrayblockingqueue: 一把鎖,add 就是呼叫的offer,只是失敗會拋異常,都不會等待
2.linkedblockingqueue: 兩把鎖,放和取不同鎖
3.linkedblockingdeque: 雙向 只有一把鎖
4.concurrentlinkedqueue: cas無鎖演算法,佇列
5 synchronousqueue: 可以認為synchronousqueue是乙個快取值為1的阻塞佇列,但是 isempty()方
法永遠返回是true,remainingcapacity() 方法永遠返回是0,remove()和removeall() 方法永遠返
回是false,iterator()方法永遠返回空,peek()方法永遠返回null
6.concurrenthashmap 分割槽(乙個區相當於乙個map),區內採用同一互拆鎖;預設16個區,16個容
量,也就是乙個區乙個。 某個區不夠是其容量*2擴充套件。值都是採取原子存。
存加鎖;取時有值時不用鎖,找到key沒值時(加鎖進入獲取)等待寫的鎖釋放再取,重要的是後面寫
入的key是放在鏈頭部的,才不用對key加鎖讀。
key相同是 由hash且equals相同。
hashmapkey相同是 由hash且(==或equals)
7. concurrentskiplistmap 有序的跳表結構,多層鍊錶。用空間換取查詢時間
8. copyonwritearraylist 其中所有可變操作(add、set 等等)都是通過對底層陣列進行一次新的
複製來實現的.這一般需要很大的開銷,但是當遍歷操作的數量大大超過可變操作的數量時,這種方
法可能比其他替代方法更 有效。
9.priorityblockingqueue 有序佇列,預設11個,無界,可以自動增加。一把鎖,take會阻塞。內部
直接用的priorityqueue
10.delayqueue 無界阻塞延時佇列,元素有延時時間,到期了,才能取出。一把鎖
threadpoolexecutor:
corepoolsize和maximumpoolsize(根據佇列邊界是否擴充套件),執行執行緒小於corepoolsize時,則創
建新的執行緒,大於等於coresize而少於最大size時,放入佇列等待空閒執行緒呼叫,列隊滿時建立新
執行緒。如果池中當前有多於 corepoolsize 的執行緒,則這些多出的執行緒在空閒時間超過
keepalivetime 時將會終止。
所有 blockingqueue 都可用於傳輸和保持提交的任務。可以使用此佇列與池大小進行互動:
如果執行的執行緒少於 corepoolsize,則 executor 始終首選新增新的執行緒,而不進行排隊。
如果執行的執行緒等於或多於 corepoolsize,則 executor 始終首選將請求加入佇列,而不新增新的
執行緒。
如果無法將請求加入佇列,則建立新的執行緒,除非建立此執行緒超出 maximumpoolsize,在這種情況
下,任務將被拒絕
12. scheduledthreadpoolexecutor 帶時間器的執行緒池,繼承自threadpoolexecutor,用的是延遲
佇列,max最大。
Java併發工具類
目錄 1.等待多執行緒完成的countdownlatch 2.同步屏障cyclicbarrier 3.控制併發執行緒數的semaphore 4.執行緒間交換資料的exchanger countdownlatch允許乙個或多個執行緒等待其他執行緒完成操作,類似於join方法。join的實現原理是不停的...
java中的併發工具類
類名稱類的簡介 類的特點 countdownlatch 允許乙個或者多個執行緒等待其他執行緒完成之後再執行後續操作 countdownlatch提供了乙個計數器,只能初始化一次,但是提供了乙個await方法,允許設定乙個時間,當等待一段時間後,就會不再阻塞當前執行緒。cyclicbarrier 讓一...
Java併發工具類之CyclicBarrier
cyclicbarrier的意思是可迴圈使用的屏障。它可以讓一組執行緒到達乙個屏障時被阻塞,直到最後乙個執行緒到達屏障時,屏障才會開門,所有阻塞的執行緒才會繼續執行。它就好像一道關卡,只有所有的部隊 執行緒 都到了才能放行。部分原始碼 public class cyclicbarrier 可以看到,...