CyclicBarrier是Java中用于多線程在屏障點同步的工具,當(dāng)指定數(shù)量的線程都調(diào)用await()后,所有線程被釋放繼續(xù)執(zhí)行,且可重復(fù)使用;常用于并行計算、性能測試等場景,支持屏障動作和異常處理,通過reset()可重置狀態(tài)。
在Java中,CyclicBarrier 是一個同步工具,用于讓一組線程在執(zhí)行到某個共同的屏障點時相互等待,直到所有線程都到達該點后,再一起繼續(xù)執(zhí)行。它特別適用于多線程協(xié)作完成階段性任務(wù)的場景,比如并行計算中的分階段處理。
CyclicBarrier 允許指定數(shù)量的線程在執(zhí)行過程中互相等待,當(dāng)所有線程都調(diào)用了 await() 方法后,這些線程才會同時被釋放,繼續(xù)執(zhí)行后續(xù)操作。這個“屏障”可以被重復(fù)使用,因此稱為“循環(huán)的”(cyclic)。
構(gòu)造方法如下:
CyclicBarrier(int parties)其中,parties 表示需要等待的線程數(shù)量;第二個構(gòu)造函數(shù)還可以傳入一個 Runnable 任務(wù),該任務(wù)會在所有線程都到達屏障點后、被釋放前執(zhí)行一次。
立即學(xué)習(xí)“Java免費學(xué)習(xí)筆記(深入)”;
以下是一個簡單的例子,展示4個線程協(xié)同工作,每個線程執(zhí)行一部分任務(wù),然后在屏障處等待,全部到達后再繼續(xù):
import java.util.concurrent.CyclicBarrier;public class CyclicBarrierExample {
????public static void main(String[] args) {
????????int threadCount = 4;
????????CyclicBarrier barrier = new CyclicBarrier(threadCount, () -> {
????????????System.out.println("? 所有線程已就位,開始下一階段!");
????????});
????????for (int i = 1; i <= threadCount; i++) {
????????????new Thread(() -> {
????????????????try {
????????????????????System.out.println(Thread.currentThread().getName() + " 正在執(zhí)行第一階段任務(wù)...");
????????????????????Thread.sleep((long)(Math.random() * 2000)); // 模擬耗時
????????????????????System.out.println(Thread.currentThread().getName() + " 到達屏障點,等待其他線程...");
????????????????????barrier.await(); // 等待其他線程
????????????????????System.out.println(Thread.currentThread().getName() + " 繼續(xù)執(zhí)行第二階段任務(wù)...");
????????????????} catch (Exception e) {
????????????????????e.printStackTrace();
????????????????}
????????????}).start();
????????}
????}
}
輸出可能類似:
Thread-0 正在執(zhí)行第一階段任務(wù)...CyclicBarrier 在實際開發(fā)中有多種用途:
使用 CyclicBarrier 時需要注意:
基本上就這些。CyclicBarrier 使用簡單,適合需要階段性同步的多線程協(xié)作場景,合理使用能有效提升程序的協(xié)調(diào)性和可讀性。
以上就是如何在Java中使用CyclicBarrier協(xié)調(diào)多個線程的詳細(xì)內(nèi)容,更多請關(guān)注php中文網(wǎng)其它相關(guān)文章!
每個人都需要一臺速度更快、更穩(wěn)定的 PC。隨著時間的推移,垃圾文件、舊注冊表數(shù)據(jù)和不必要的后臺進程會占用資源并降低性能。幸運的是,許多工具可以讓 Windows 保持平穩(wěn)運行。
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號