java多線程之CyclicBarrier的使用方法
java多線程之CyclicBarrier的使用方法
public class CyclicBarrierTest {
public static void main(String[] args) {
ExecutorService service = Executors.newCachedThreadPool();
final CyclicBarrier cb = new CyclicBarrier(3);
for(int i=0;i<3;i++){
Runnable runnable = new Runnable(){
public void run(){
try {
Thread.sleep((long)(Math.random()*10000));
System.out.println("線程" + Thread.currentThread().getName() +
"即將到達(dá)集合地點1,當(dāng)前已有" + (cb.getNumberWaiting()+1) + "個已經(jīng)到達(dá)," + (cb.getNumberWaiting()==2?"都到齊了,繼續(xù)走啊":"正在等候"));
cb.await();
Thread.sleep((long)(Math.random()*10000));
System.out.println("線程" + Thread.currentThread().getName() +
"即將到達(dá)集合地點2,當(dāng)前已有" + (cb.getNumberWaiting()+1) + "個已經(jīng)到達(dá)," + (cb.getNumberWaiting()==2?"都到齊了,繼續(xù)走啊":"正在等候"));
cb.await();
Thread.sleep((long)(Math.random()*10000));
System.out.println("線程" + Thread.currentThread().getName() +
"即將到達(dá)集合地點3,當(dāng)前已有" + (cb.getNumberWaiting() + 1) + "個已經(jīng)到達(dá)," + (cb.getNumberWaiting()==2?"都到齊了,繼續(xù)走啊":"正在等候"));
cb.await();
} catch (Exception e) {
e.printStackTrace();
}
}
};
service.execute(runnable);
}
service.shutdown();
}
}
運行結(jié)果如下:
線程pool-1-thread-3即將到達(dá)集合地點1,當(dāng)前已有1個已經(jīng)到達(dá),正在等候 線程pool-1-thread-1即將到達(dá)集合地點1,當(dāng)前已有2個已經(jīng)到達(dá),正在等候 線程pool-1-thread-2即將到達(dá)集合地點1,當(dāng)前已有3個已經(jīng)到達(dá),都到齊了,繼續(xù)走啊 線程pool-1-thread-3即將到達(dá)集合地點2,當(dāng)前已有1個已經(jīng)到達(dá),正在等候 線程pool-1-thread-1即將到達(dá)集合地點2,當(dāng)前已有2個已經(jīng)到達(dá),正在等候 線程pool-1-thread-2即將到達(dá)集合地點2,當(dāng)前已有3個已經(jīng)到達(dá),都到齊了,繼續(xù)走啊 線程pool-1-thread-1即將到達(dá)集合地點3,當(dāng)前已有1個已經(jīng)到達(dá),正在等候 線程pool-1-thread-3即將到達(dá)集合地點3,當(dāng)前已有2個已經(jīng)到達(dá),正在等候 線程pool-1-thread-2即將到達(dá)集合地點3,當(dāng)前已有3個已經(jīng)到達(dá),都到齊了,繼續(xù)走啊
如有疑問請留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關(guān)文章
使用Spring和Redis創(chuàng)建處理敏感數(shù)據(jù)的服務(wù)的示例代碼
許多公司處理的用戶敏感數(shù)據(jù)由于法律限制不能永久存儲,根據(jù)規(guī)定,這些數(shù)據(jù)的存儲時間不能超過預(yù)設(shè)期限,并且最好在用于服務(wù)目的之后就將其刪除,解決這個問題有多種可能的方案,在本文中,我想展示一個利用 Spring 和 Redis 處理敏感數(shù)據(jù)的應(yīng)用程序的簡化示例2025-04-04
IntelliJ IDEA 好用插件之a(chǎn)nalyze inspect code詳解
這篇文章主要介紹了IntelliJ IDEA 好用插件之a(chǎn)nalyze inspect code的相關(guān)知識,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2020-12-12
spring的同一定時任務(wù)上一次的任務(wù)未結(jié)束前不會啟動這次任務(wù)問題
這篇文章主要介紹了spring的同一定時任務(wù)上一次的任務(wù)未結(jié)束前不會啟動這次任務(wù)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12
struts2的國際化實現(xiàn)網(wǎng)站整體中英文切換實例代碼
本篇文章主要介紹了struts2的國際化實現(xiàn)網(wǎng)站整體中英文切換實例代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-10-10
java面向?qū)ο笤O(shè)計原則之單一職責(zé)與依賴倒置原則詳解
這篇文章主要介紹了java面向?qū)ο笤O(shè)計原則之單一職責(zé)與依賴倒置原則的分析詳解,有需要的朋友可以借鑒參考下,希望可以有所幫助,祝大家多多進(jìn)步早日升職加薪2021-10-10
SpringBoot緩存抽象@Cacheable與緩存管理器配置方法
SpringBoot的緩存抽象通過@Cacheable注解和CacheManager接口,提供了靈活高效的緩存管理,本文詳細(xì)介紹了@Cacheable的使用技巧、緩存管理器配置方法、自定義鍵生成策略以及緩存同步與失效機(jī)制,幫助開發(fā)者構(gòu)建高效的緩存策略,優(yōu)化應(yīng)用性能,感興趣的朋友一起看看吧2025-03-03
MyBatis傳入多個參數(shù)時parameterType的寫法
這篇文章主要介紹了MyBatis傳入多個參數(shù)時parameterType的寫法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-12-12

