发包工具_java并发包工具类
1. CountDownLatch(線程計(jì)數(shù)器 )
CountDownLatch類位于java.util.concurrent 包下,利用它可以實(shí)現(xiàn)類似計(jì)數(shù)器的功能。比如有一個(gè)任務(wù) A,它要等待其他 4 個(gè)任務(wù)執(zhí)行完畢之后才能執(zhí)行,此時(shí)就可以利用 CountDownLatch來(lái)實(shí)現(xiàn)這種功能了。
2. CyclicBarrier(回環(huán)柵欄-等待至 barrier 狀態(tài)再全部同時(shí)執(zhí)行)
字面意思回環(huán)柵欄,通過(guò)它可以實(shí)現(xiàn)讓一組線程等待至某個(gè)狀態(tài)之后再全部同時(shí)執(zhí)行。叫做回環(huán)是因?yàn)楫?dāng)所有等待線程都被釋放以后,CyclicBarrier 可以被重用。我們暫且把這個(gè)狀態(tài)就叫做barrier,當(dāng)調(diào)用 await()方法之后,線程就處于 barrier 了。 CyclicBarrier 中最重要的方法就是 await 方法,它有 2 個(gè)重載版本:
3. Semaphore(信號(hào)量-控制同時(shí)訪問(wèn)的線程個(gè)數(shù))
Semaphore 翻譯成字面意思為 信號(hào)量,Semaphore 可以控制同時(shí)訪問(wèn)的線程個(gè)數(shù),通過(guò)acquire() 獲取一個(gè)許可,如果沒有就等待,而 release() 釋放一個(gè)許可。 Semaphore 類中比較重要的幾個(gè)方法:
例子:若一個(gè)工廠有5 臺(tái)機(jī)器,但是有8個(gè)工人,一臺(tái)機(jī)器同時(shí)只能被一個(gè)工人使用,只有使用完 了,其他工人才能繼續(xù)使用。那么我們就可以通過(guò) Semaphore 來(lái)實(shí)現(xiàn):
注: CountDownLatch 和 CyclicBarrier 都能夠?qū)崿F(xiàn)線程之間的等待,只不過(guò)它們側(cè)重點(diǎn)不同; CountDownLatch 一般用于某個(gè)線程 A 等待若干個(gè)其他線程執(zhí)行完任務(wù)之后,它才執(zhí)行; 而 CyclicBarrier 一般用于一組線程互相等待至某個(gè)狀態(tài),然后這一組線程再同時(shí)執(zhí)行; 另外,CountDownLatch 是不能夠重用的,而 CyclicBarrier 是可以重用的。 Semaphore 其實(shí)和鎖有點(diǎn)類似,它一般用于控制對(duì)某組資源的訪問(wèn)權(quán)限。
總結(jié)
以上是生活随笔為你收集整理的发包工具_java并发包工具类的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: element ui怎么调图标的大小_大
- 下一篇: 标题在图表上_从零开始学Excel——标