JAVA併發類記錄

2021-08-27 17:18:33 字數 1586 閱讀 3528

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 可以看到,...