日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

发包工具_java并发包工具类

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

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

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

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

字面意思回環(huán)柵欄,通過它可以實現(xiàn)讓一組線程等待至某個狀態(tài)之后再全部同時執(zhí)行。叫做回環(huán)是因為當(dāng)所有等待線程都被釋放以后,CyclicBarrier 可以被重用。我們暫且把這個狀態(tài)就叫做barrier,當(dāng)調(diào)用 await()方法之后,線程就處于 barrier 了。 CyclicBarrier 中最重要的方法就是 await 方法,它有 2 個重載版本:

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

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

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

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

    總結(jié)

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

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