简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者
博主新书推荐:《Android系统多媒体进阶实战》🚀
Android Audio工程师专栏: Audio工程师进阶系列【原创干货持续更新中……】🚀
Android多媒体专栏: 多媒体系统工程师系列【原创干货持续更新中……】🚀
推荐1:车载系统实战课:AAOS车载系统+AOSP14系统攻城狮入门视频实战课 🚀
推荐2:HIDL与AIDL实战课:Android14 Binder之HIDL与AIDL通信实战课 🚀
人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.
🍉🍉🍉文章目录🍉🍉🍉
🌻1. 前言
本篇目的:Java线程并发异常处理之BrokenBarrierException:用法实例
🌻2. Java线程并发异常处理BrokenBarrierException介绍
-
基本概念
BrokenBarrierException在CyclicBarrier或Phaser等待过程中抛出,表示屏障已被破坏,通常由某个线程中断、异常或提前重置导致。 -
功能
通过await方法抛出异常,通知所有等待线程屏障失效,避免死等。 -
使用限制
需捕获并处理,屏障破坏后不可复用,需重新创建。 -
性能特性
零成本检测,仅在破坏路径抛出异常。 -
使用场景
多阶段任务、并行计算、并发测试中检测协作失败。
🌻3. 代码实例
🌻3.1 使用CyclicBarrier捕获中断导致的BrokenBarrierException
-
应用场景
一个线程中断,其余线程收到屏障破坏信号。 -
用法实例
import java.util.concurrent.*; public class BarrierInterruptDemo { public static void main(String[] args) throws InterruptedException { CyclicBarrier barrier = new CyclicBarrier(3); Runnable task = () -> { try { barrier.await(); } catch (BrokenBarrierException | InterruptedException e) { System.out.println(Thread.currentThread().getName() + " 屏障破坏"); } }; Thread t1 = new Thread(task); Thread t2 = new Thread(task); t1.start(); t2.start(); Thread.sleep(100); t1.interrupt(); } }
输出示例:
Thread-0 屏障破坏
Thread-1 屏障破坏
🌻3.2 使用Phaser捕获超时导致的BrokenBarrierException
-
应用场景
等待超时破坏屏障。 -
用法实例
import java.util.concurrent.*; public class PhaserTimeoutDemo { public static void main(String[] args) { Phaser phaser = new Phaser(2); new Thread(() -> { try { phaser.awaitAdvanceInterruptibly(phaser.getPhase(), 500, TimeUnit.MILLISECONDS); } catch (TimeoutException | BrokenBarrierException e) { System.out.println("超时破坏"); } catch (InterruptedException ignored) {} }).start(); } }
输出:
超时破坏
🌻3.3 使用CyclicBarrier捕获重置导致的BrokenBarrierException
-
应用场景
主线程提前重置屏障。 -
用法实例
import java.util.concurrent.*; public class BarrierResetDemo { public static void main(String[] args) throws InterruptedException { CyclicBarrier barrier = new CyclicBarrier(3); Runnable task = () -> { try { barrier.await(); } catch (BrokenBarrierException e) { System.out.println("屏障已重置"); } catch (InterruptedException ignored) {} }; new Thread(task).start(); new Thread(task).start(); Thread.sleep(100); barrier.reset(); } }
输出:
屏障已重置
屏障已重置
🌻3.4 线程并发异常处理BrokenBarrierException总结
关键词 | 功能描述 | 典型应用 |
---|---|---|
BrokenBarrierException | 屏障破坏信号 | 协作失败检测 |
await | 等待并检测 | CyclicBarrier/Phaser等待点 |
reset | 手动破坏屏障 | 并发测试快速重置 |