日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

发包工具_java并发包工具类

發(fā)布時(shí)間:2025/3/20 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 发包工具_java并发包工具类 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1. CountDownLatch(線程計(jì)數(shù)器 )

CountDownLatch類位于java.util.concurrent 包下,利用它可以實(shí)現(xiàn)類似計(jì)數(shù)器的功能。比如有一個(gè)任務(wù) A,它要等待其他 4 個(gè)任務(wù)執(zhí)行完畢之后才能執(zhí)行,此時(shí)就可以利用 CountDownLatch來實(shí)現(xiàn)這種功能了。

2. CyclicBarrier(回環(huán)柵欄-等待至 barrier 狀態(tài)再全部同時(shí)執(zhí)行)

字面意思回環(huán)柵欄,通過它可以實(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è)重載版本:

  • public int await():用來掛起當(dāng)前線程,直至所有線程都到達(dá) barrier 狀態(tài)再同時(shí)執(zhí)行后續(xù)任務(wù);
  • public int await(long timeout, TimeUnit unit):讓這些線程等待至一定的時(shí)間,如果還有線程沒有到達(dá) barrier 狀態(tài)就直接讓到達(dá) barrier 的線程執(zhí)行后續(xù)任務(wù)。 具體使用如下,另外 CyclicBarrier 是可以重用的。
  • 3. Semaphore(信號(hào)量-控制同時(shí)訪問的線程個(gè)數(shù))

    Semaphore 翻譯成字面意思為 信號(hào)量,Semaphore 可以控制同時(shí)訪問的線程個(gè)數(shù),通過acquire() 獲取一個(gè)許可,如果沒有就等待,而 release() 釋放一個(gè)許可。 Semaphore 類中比較重要的幾個(gè)方法:

  • public void acquire(): 用來獲取一個(gè)許可,若無許可能夠獲得,則會(huì)一直等待,直到獲得許可。
  • public void acquire(int permits):獲取 permits 個(gè)許可
  • public void release() { } :釋放許可。注意,在釋放許可之前,必須先獲獲得許可。
  • public void release(int permits) { }:釋放 permits 個(gè)許可 上面 4 個(gè)方法都會(huì)被阻塞,如果想立即得到執(zhí)行結(jié)果,可以使用下面幾個(gè)方法
  • public boolean tryAcquire():嘗試獲取一個(gè)許可,若獲取成功,則立即返回 true,若獲取失敗,則立即返回 false
  • public boolean tryAcquire(long timeout, TimeUnit unit):嘗試獲取一個(gè)許可,若在指定的時(shí)間內(nèi)獲取成功,則立即返回 true,否則則立即返回 false
  • public boolean tryAcquire(int permits):嘗試獲取 permits 個(gè)許可,若獲取成功,則立即返回 true,若獲取失敗,則立即返回 false
  • public boolean tryAcquire(int permits, long timeout, TimeUnit unit): 嘗試獲取 permits個(gè)許可,若在指定的時(shí)間內(nèi)獲取成功,則立即返回 true,否則則立即返回 false
  • 還可以通過 availablePermits()方法得到可用的許可數(shù)目。
  • 例子:若一個(gè)工廠有5 臺(tái)機(jī)器,但是有8個(gè)工人,一臺(tái)機(jī)器同時(shí)只能被一個(gè)工人使用,只有使用完 了,其他工人才能繼續(xù)使用。那么我們就可以通過 Semaphore 來實(shí)現(xiàn):

    注: CountDownLatch 和 CyclicBarrier 都能夠?qū)崿F(xiàn)線程之間的等待,只不過它們側(cè)重點(diǎn)不同; CountDownLatch 一般用于某個(gè)線程 A 等待若干個(gè)其他線程執(zhí)行完任務(wù)之后,它才執(zhí)行; 而 CyclicBarrier 一般用于一組線程互相等待至某個(gè)狀態(tài),然后這一組線程再同時(shí)執(zhí)行; 另外,CountDownLatch 是不能夠重用的,而 CyclicBarrier 是可以重用的。 Semaphore 其實(shí)和鎖有點(diǎn)類似,它一般用于控制對(duì)某組資源的訪問權(quán)限。

    總結(jié)

    以上是生活随笔為你收集整理的发包工具_java并发包工具类的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。