Java多线程中如何实现Phaser同步屏障
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章将为大家详细讲解有关Java多线程中如何实现Phaser同步屏障,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。前言是否会遇到这样的场景,你向线
千家信息网最后更新 2026年11月01日Java多线程中如何实现Phaser同步屏障
这篇文章将为大家详细讲解有关Java多线程中如何实现Phaser同步屏障,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
前言
是否会遇到这样的场景,你向线程池提交了多个任务,你希望这批任务全部完成后能够反向通知你。
你可能会使用线程计数的方式,等到计数器累加到提交的线程数量,然后通知。emmm,不是不可以,只是不够优雅。本文提供优雅的实现方式,Phaser同步屏障。
Maven依赖
也可以不依赖,本人习惯把代码简单化,使用了hutool,所以依赖只有这个。
cn.hutool hutool-all 5.7.15
代码
废话不多说,上代码。
package com.huyi.csdn.tools; import cn.hutool.core.thread.ThreadUtil; import java.util.ArrayList;import java.util.List;import java.util.Random;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.Phaser;import java.util.concurrent.TimeUnit; /** * @Program: csdn @ClassName: PhaserUtil @Author: huyi @Date: 2021-11-06 21:03 @Description: * 多线程监控回调工具 @Version: V1.0 */public class PhaserUtil { public static final ExecutorService executorService = Executors.newFixedThreadPool(50); public static class CustomPharser extends Phaser { private final Runnable runnable; public CustomPharser(Runnable runnable) { this.runnable = runnable; } @Override protected boolean onAdvance(int phase, int registeredParties) { this.runnable.run(); return super.onAdvance(phase, registeredParties); } } /** * 提交任务以及完成后需要执行的内容 * * @param tasks 任务 * @param complete 完成任务 */ public static void submit(List tasks, Runnable complete) { Phaser phaser = new CustomPharser(complete); for (Runnable runnable : tasks) { executorService.submit( () -> { phaser.register(); runnable.run(); System.out.println(Thread.currentThread().getName() + "完成任务!"); phaser.arriveAndAwaitAdvance(); }); } } /** 摧毁线程池 */ public static void destroy() { System.out.println("摧毁线程池"); executorService.shutdown(); } public static void main(String[] args) { List tasks = new ArrayList<>(); Random random = new Random(); for (int i = 0; i < 10; i++) { tasks.add( () -> { ThreadUtil.sleep(random.nextInt(10), TimeUnit.SECONDS); }); } submit(tasks, () -> System.out.println("所有任务已完成")); ThreadUtil.sleep(20, TimeUnit.SECONDS); destroy(); }} 代码说明
1、提交任务执行的方式是Runnable也好,Callable也好,或者Consumer、Function等等,不影响,你可以看着调整。
2、完成后的Runnable也和第一点同理。
验证一下
OK,没什么问题。
关于Java多线程中如何实现Phaser同步屏障就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
线程
任务
屏障
同步
代码
内容
方式
优雅
文章
更多
知识
篇文章
不错
没什么
上代
不够
前言
只是
只有
场景
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网科技图片
互联网的科技
互联网通讯科技
北京互联网科技公司
互联网科技公司怎么样
紫鲸互联网科技
奇酷互联网络科技
凡科互联网科技
郑州华宇互联网科技
互联网前沿科技
互联网养老 桔豆科技
科技类的互联网平台
南山科技园互联网公司有哪些
佳云科技和互联网广告
佛山市拉法互联网科技有限公司
长沙互联网科技
35岁以上互联网科技行业
新氧科技和美国互联网有关系吗
西安有哪些互联网高科技企业
数字互联网科技有限公司
互联网科技企业
互联网科技与金融科技
互联网与未来科技
上海喔噻互联网科技
农村开互联网科技讲堂
天速互联网络科技有限公司
恒银科技与互联网金融
抖集互联网科技技术咨询
好易买互联网科技
三亚科技创新互联网基地