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á)集合地點(diǎn)1,當(dāng)前已有" + (cb.getNumberWaiting()+1) + "個(gè)已經(jīng)到達(dá)," + (cb.getNumberWaiting()==2?"都到齊了,繼續(xù)走啊":"正在等候"));
cb.await();
Thread.sleep((long)(Math.random()*10000));
System.out.println("線程" + Thread.currentThread().getName() +
"即將到達(dá)集合地點(diǎn)2,當(dāng)前已有" + (cb.getNumberWaiting()+1) + "個(gè)已經(jīng)到達(dá)," + (cb.getNumberWaiting()==2?"都到齊了,繼續(xù)走啊":"正在等候"));
cb.await();
Thread.sleep((long)(Math.random()*10000));
System.out.println("線程" + Thread.currentThread().getName() +
"即將到達(dá)集合地點(diǎn)3,當(dāng)前已有" + (cb.getNumberWaiting() + 1) + "個(gè)已經(jīng)到達(dá)," + (cb.getNumberWaiting()==2?"都到齊了,繼續(xù)走啊":"正在等候"));
cb.await();
} catch (Exception e) {
e.printStackTrace();
}
}
};
service.execute(runnable);
}
service.shutdown();
}
}
運(yùn)行結(jié)果如下:
線程pool-1-thread-3即將到達(dá)集合地點(diǎn)1,當(dāng)前已有1個(gè)已經(jīng)到達(dá),正在等候 線程pool-1-thread-1即將到達(dá)集合地點(diǎn)1,當(dāng)前已有2個(gè)已經(jīng)到達(dá),正在等候 線程pool-1-thread-2即將到達(dá)集合地點(diǎn)1,當(dāng)前已有3個(gè)已經(jīng)到達(dá),都到齊了,繼續(xù)走啊 線程pool-1-thread-3即將到達(dá)集合地點(diǎn)2,當(dāng)前已有1個(gè)已經(jīng)到達(dá),正在等候 線程pool-1-thread-1即將到達(dá)集合地點(diǎn)2,當(dāng)前已有2個(gè)已經(jīng)到達(dá),正在等候 線程pool-1-thread-2即將到達(dá)集合地點(diǎn)2,當(dāng)前已有3個(gè)已經(jīng)到達(dá),都到齊了,繼續(xù)走啊 線程pool-1-thread-1即將到達(dá)集合地點(diǎn)3,當(dāng)前已有1個(gè)已經(jīng)到達(dá),正在等候 線程pool-1-thread-3即將到達(dá)集合地點(diǎn)3,當(dāng)前已有2個(gè)已經(jīng)到達(dá),正在等候 線程pool-1-thread-2即將到達(dá)集合地點(diǎn)3,當(dāng)前已有3個(gè)已經(jīng)到達(dá),都到齊了,繼續(xù)走啊
如有疑問請(qǐng)留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
JavaMail實(shí)現(xiàn)帶附件的郵件發(fā)送
這篇文章主要為大家詳細(xì)介紹了JavaMail實(shí)現(xiàn)帶附件的郵件發(fā)送,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08
使用Spring和Redis創(chuàng)建處理敏感數(shù)據(jù)的服務(wù)的示例代碼
許多公司處理的用戶敏感數(shù)據(jù)由于法律限制不能永久存儲(chǔ),根據(jù)規(guī)定,這些數(shù)據(jù)的存儲(chǔ)時(shí)間不能超過預(yù)設(shè)期限,并且最好在用于服務(wù)目的之后就將其刪除,解決這個(gè)問題有多種可能的方案,在本文中,我想展示一個(gè)利用 Spring 和 Redis 處理敏感數(shù)據(jù)的應(yīng)用程序的簡(jiǎn)化示例2025-04-04
IntelliJ IDEA 好用插件之a(chǎn)nalyze inspect code詳解
這篇文章主要介紹了IntelliJ IDEA 好用插件之a(chǎn)nalyze inspect code的相關(guān)知識(shí),本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2020-12-12
spring的同一定時(shí)任務(wù)上一次的任務(wù)未結(jié)束前不會(huì)啟動(dòng)這次任務(wù)問題
這篇文章主要介紹了spring的同一定時(shí)任務(wù)上一次的任務(wù)未結(jié)束前不會(huì)啟動(dòng)這次任務(wù)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12
struts2的國(guó)際化實(shí)現(xiàn)網(wǎng)站整體中英文切換實(shí)例代碼
本篇文章主要介紹了struts2的國(guó)際化實(shí)現(xiàn)網(wǎng)站整體中英文切換實(shí)例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10
java面向?qū)ο笤O(shè)計(jì)原則之單一職責(zé)與依賴倒置原則詳解
這篇文章主要介紹了java面向?qū)ο笤O(shè)計(jì)原則之單一職責(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傳入多個(gè)參數(shù)時(shí)parameterType的寫法
這篇文章主要介紹了MyBatis傳入多個(gè)參數(shù)時(shí)parameterType的寫法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12
Java求出任意數(shù)字的各個(gè)位數(shù)之和方式
這篇文章主要介紹了Java求出任意數(shù)字的各個(gè)位數(shù)之和方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01

