java併發工具

參考:
https://blog.csdn.net/coderinchina/article/details/54914852

常用:
CountDownLatch
semaphore

1.CountDownLatch是一個同步計數器
用於多個線程之間的同步計數,比如一個主線程要做n件事情,可以吧同步計數器傳遞給要做這些事情的子線程,子線程完成了,則計數器減1,主線程中計數器等待完成,則主線程返回結果,或者從子線程中獲取他們的值。

2.Semaphore
控制某個資源的併發訪問數量。

semaphore(信號量)是用來控制同時訪問特定資源的線程數量,它通過協調各個線程,以保證合理的使用公共資源.這個跟隊列有點像,畫圖理解更直觀
acquire():獲取一個許可證,

release():釋放許可證,這時候有多餘的線程就加入到線程池中

tryAcquire():嘗試獲取許可證

intavailblePermits():返回此信號量當前可用的許可證數

intgetQueueLength():返回正在等待獲取許可證的線程數

hasQueuedThreads():是否有線程正在等待獲取許可證

reducePermits(int reduction):減少reduction個許可證,

getQueueThreads():返回所有等待獲取許可證的線程集合

Semaphore類的構造函數中傳入的數,表示同時併發訪問控制在多少個線程
3.Exchanger

exchanger是一個用於線程間協作的工具類,Exchanger用於進行線程間的數據交換,它提供一個同步點,在這個同步點,二個線程可以交換彼此的數據.在這二個線程通過exchange方法交換數據,如果第一個線程先執行exchange()方法,它會一直等待第二個線程也執行exchange方法,當二個線程都達到同步點時,這二個線程就可以交換數據,將本線程生產出來的數據傳遞給對方

4.CyclicBarrier

CyclicBarrierr如果你在翻譯的話是關卡,柵欄的意思,也就是被卡住在哪裏,還可以把這個詞扯開成cyclic和barrier,cyclic是循環的意思,barrier是障礙的意思,從字面意思連起來讀就是可循環的障礙,翻譯成java語言就是當有幾個線程同時去訪問,要阻塞,直到最後一個線程達到屏障時,程序纔會繼續執行,

CyclicBarrier使用也很簡單,首先它有2個構造函數:

public CyclicBarrier(int parties):parties

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章