Java并發(fā)編程之柵欄(CyclicBarrier)實(shí)例介紹
柵欄類似閉鎖,但是它們是有區(qū)別的.
1.閉鎖用來(lái)等待事件,而柵欄用于等待其他線程.什么意思呢?就是說(shuō)閉鎖用來(lái)等待的事件就是countDown事件,只有該countDown事件執(zhí)行后所有之前在等待的線程才有可能繼續(xù)執(zhí)行;而柵欄沒(méi)有類似countDown事件控制線程的執(zhí)行,只有線程的await方法能控制等待的線程執(zhí)行.
2.CyclicBarrier強(qiáng)調(diào)的是n個(gè)線程,大家相互等待,只要有一個(gè)沒(méi)完成,所有人都得等著。
場(chǎng)景分析:10個(gè)人去春游,規(guī)定達(dá)到一個(gè)地點(diǎn)后才能繼續(xù)前行.代碼如下
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
class CyclicBarrierWorker implements Runnable {
private int id;
private CyclicBarrier barrier;
public CyclicBarrierWorker(int id, final CyclicBarrier barrier) {
this.id = id;
this.barrier = barrier;
}
@Override
public void run() {
// TODO Auto-generated method stub
try {
System.out.println(id + " th people wait");
barrier.await(); // 大家等待最后一個(gè)線程到達(dá)
} catch (InterruptedException | BrokenBarrierException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public class TestCyclicBarrier {
public static void main(String[] args) {
int num = 10;
CyclicBarrier barrier = new CyclicBarrier(num, new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("go on together!");
}
});
for (int i = 1; i <= num; i++) {
new Thread(new CyclicBarrierWorker(i, barrier)).start();
}
}
}
輸出
1 th people wait
2 th people wait
3 th people wait
4 th people wait
5 th people wait
7 th people wait
8 th people wait
6 th people wait
9 th people wait
10 th people wait
go on together!
相關(guān)文章
淺談Mybatis中resultType為hashmap的情況
這篇文章主要介紹了淺談Mybatis中resultType為hashmap的情況,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-12-12Spring?Security權(quán)限想要細(xì)化到按鈕實(shí)現(xiàn)示例
這篇文章主要為大家介紹了Spring?Security權(quán)限想要細(xì)化到按鈕實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07Java網(wǎng)絡(luò)編程UDP協(xié)議發(fā)送接收數(shù)據(jù)
這篇文章主要為大家詳細(xì)介紹了Java網(wǎng)絡(luò)編程UDP協(xié)議發(fā)送接收數(shù)據(jù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08springcloud集成skywalking實(shí)現(xiàn)全鏈路追蹤
在微服務(wù)治理中,springcloud也是技術(shù)選型中的一個(gè)成熟的解決方案,而且相對(duì)dubbo來(lái)說(shuō),springcloud涉及到的微服務(wù)組件更多,調(diào)用鏈路可能更復(fù)雜,本文將詳細(xì)介紹下如何在springcloud中集成skywalking,需要的朋友可以參考下2024-01-01從Myeclipse 導(dǎo)入到eclipse中無(wú)法識(shí)別為 web項(xiàng)目 問(wèn)題的解決步驟
這篇文章主要介紹了從Myeclipse 導(dǎo)入到eclipse中無(wú)法識(shí)別為 web項(xiàng)目 問(wèn)題的解決步驟,需要的朋友可以參考下2018-05-05