Phaser是处理分阶段的多线程的很好的方法:
比如需求是:
开启3个线程,分别打印字母a,b,c各10次,然后进入下一阶段打印后面的字母d,e,f各10次,然后再进入下一阶段.......以此类推,直到整个字母表全部打印完毕。
代码实现:
import java.util.concurrent.Phaser;
public class MyTest {
public static void main(String[] args) {
Phaser phaser = new Phaser(3) {// 共有3个工作线程,因此在构造函数中赋值为3
@Override
protected boolean onAdvance(int phase, int registeredParties) {
System.out.println("\n=========华丽的分割线=============");
return registeredParties == 0;
}
};
System.out.println("程序开始执行");
char a = 'a';
for (int i = 0; i < 3; i++) { // 创建并启动3个线程
new MyThread((char) (a + i), phaser).start();
}
while (!phaser.isTerminated()) {// 只要phaser不终结,主线程就循环等待
Thread.yield();
}
System.out.println("程序结束");
}
}
class MyThread extends Thread {
private char c;
private Phaser phaser;
public MyThread(char c, Phaser phaser) {
this.c = c;
this.phaser = phaser;
}
@Override
public void run() {
while (!phaser.isTerminated()) {
for (int i = 0; i < 10; i++) { // 将当前字母打印10次
System.out.print(c + " ");
}
// 打印完当前字母后,将其更新为其后第三个字母,例如b更新为e,用于下一阶段打印
c = (char) (c + 3);
if (c > 'z') {
// 如果超出了字母z,则在phaser中动态减少一个线程,并退出循环结束本线程
phaser.arriveAndDeregister();
break;
} else {
// 反之,等待其他线程到达阶段终点,再一起进入下一个阶段
phaser.arriveAndAwaitAdvance();
}
}
}
}
分享到:
相关推荐
主要介绍了java多线程之Phaser的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
内容概要:最新2023年Java高并发多线程后端面试题整理, 包含线程池,并发集合,volatile,CountDownLatch,Semaphore,Phaser,AQS,ReentrantLock,ReentrantLock等等问题, 用简洁明了的语言,通俗易懂地阐述了高...
Java并发编程学习宝典(漫画版),Java并发编程学习宝典(漫画版)Java并发编程学习宝典(漫画版)Java并发编程学习宝典(漫画版)Java并发编程学习宝典(漫画版)Java并发编程学习宝典(漫画版)Java并发编程学习...
全书通过60多个简单而非常有效的实例,帮助读者快速掌握Java 7多线程应用程序的开发技术。学习完本书,你可以将这些开发技术直接应用到自己的应用程序中。 《Java 7并发编程实战手册》适合具有一定Java编程基础的...
phaser-inspector, Phaser检查器插件允许你检查Phaser游戏 Phaser检查器插件将重新设计 [UPDATE] Phaser检查器插件重新设计和重构,以使它的成为更好的插件。 [UPDATE] Phaser检查器插件支持RenderTexture上的。 ...
开源项目-Shoen-phaser_multiplayer_demo.zip,带go服务器的html5多人游戏
使用 Phaser HTML5 game framework 製做的刮刮樂範例程式
Phaser的伟大的开源游戏开发框架,使用HTML5创建游戏。这是一款利用Phaser.js制作仿Nokia经典的贪吃蛇游戏。
最新版本的phaser文件
Phaser3.22最新版
phaser.min.js,免费,实用,提供phaser.min.js,前端JS
富士施乐(xerox) phaser3155驱动软件,英文版
phaser开发最新版本库文件
Xerox富士施乐Phaser 3200MFP激光打印机驱动For Vista-64。
phaser2.4.4版本 html5游戏编写利器
基于phaser的H5小游戏趣味反弹球,包括小球和障碍物的创建、障碍物强度和小球数量升级,单H5文件结构简单易懂,适合独立小游戏开发的快速上手
phaser HTML5 2D游戏引擎框架
js游戏引擎phaser示例:吃蘑菇游戏 使用phaser.js驱动,请在本地或服务器环境下打开使用访问game.html 操作说明: 上下左右键移动跳跃操控角色,空格键射击
boilerplate-phaser-es2016, 在 Phaser.js 上,示例游戏 使用 ECMAScript 2016语法 boilerplate-phaser-es2016
适配微信小游戏的Phaser以及它的demo集合phaser-wxdemo-master.zip