phaser三个学生做题目
3个学生一起参加考试,一共有三道题,要求所有学生到齐才能开始考试,全部同学都做完第一题,学生才能继续做第二题,
全部学生做完了第二题,才能做第三题,所有学生都做完的第三题,考试才结束
public class StudentRunnable implements Runnable{
Phaser phaser = null;
String name = null;
public StudentRunnable( Phaser phaser , String name ) {
this.phaser = phaser;
this.name = name;
}
@Override
public void run() {
prepare();
phaser.arriveAndAwaitAdvance(); //等待所有的学生到齐
doExercise1();
phaser.arriveAndAwaitAdvance(); //等待所有的学生做完第一道题
doExercise2();
phaser.arriveAndAwaitAdvance(); //等待所有的学生做完第二道题
doExercise3();
phaser.arriveAndAwaitAdvance(); //等待所有的学生做完第三道题
}
private void prepare() {
try {
Thread.sleep(new Random().nextInt());
System.out.println(name + " 准备好了");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
private void doExercise1() {
try {
Thread.sleep(new Random().nextInt());
System.out.println(name + " 做完第一道题");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
private void doExercise2() {
try {
Thread.sleep(new Random().nextInt());
System.out.println(name + " 做完第二道题");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
private void doExercise3() {
try {
Thread.sleep(new Random().nextInt());
System.out.println(name + " 做完第三道题");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
/**
* boolean onAdvance(int phase, int registeredParties)方法。
* 此方法有2个作用:
* 1、当每一个阶段执行完毕,此方法会被自动调用,因此,重载此方法写入的代码会在每个阶段执行完毕时执行,
* 2、当此方法返回true时,意味着Phaser被终止,因此可以巧妙的设置此方法的返回值来终止所有线程。
*
*/
public class Client { public static void main(String[] args) {
Phaser phaser = new Phaser() {
@Override
protected boolean onAdvance(int phase, int registeredParties) {
switch (phase) {
case :
return studentArrived();
case :
return finishFirstExercise();
case :
return finishSecondExercise();
case :
return finishExam();
default:
return true;
}
}
private boolean studentArrived(){
System.out.println("学生准备好了,学生人数:"+getRegisteredParties());
return false;
} private boolean finishFirstExercise(){
System.out.println("第一题所有学生做完");
return false;
} private boolean finishSecondExercise(){
System.out.println("第二题所有学生做完");
return false;
} private boolean finishExam(){
System.out.println("第三题所有学生做完,结束考试");
return true;
}
}; List <Thread> threads = new ArrayList<>();
IntStream.range(, ).forEach(i -> {
threads.add(new Thread(new StudentRunnable(phaser, "【学生"+i+"】")));
}); threads.forEach(t -> t.start()); threads.forEach(t -> {
try {
t.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
});
System.out.println("考试结束 "+phaser.isTerminated() );
}
}

phaser三个学生做题目的更多相关文章
- #YCB#待做题目与填坑资料
各种填坑资料(qwq) 主席树(by YL)戳 树套树(by ZSY)戳 不要问我这些题咋来的(查大佬的水表呗) 题目列表: [HDU5977]Garden of Eden [BZOJ2752][HA ...
- 剑指offer题目系列三(链表相关题目)
本篇延续上一篇剑指offer题目系列二,介绍<剑指offer>第二版中的四个题目:O(1)时间内删除链表结点.链表中倒数第k个结点.反转链表.合并两个排序的链表.同样,这些题目并非严格按照 ...
- HTML第三天作业做的表格
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xht ...
- NetAnalyzer笔记 之 三. 用C++做一个抓包程序
[创建时间:2015-08-27 22:15:17] NetAnalyzer下载地址 经过前两篇的瞎扯,你是不是已经厌倦了呢,那么这篇让我们来点有意思的吧,什么,用C#.不,这篇我们先来C++的 Wi ...
- Good Bye 2016 A. New Year and Hurry【贪心/做题目每道题花费时间按步长为5等差增长,求剩余时间够做几道题】
A. New Year and Hurry time limit per test 1 second memory limit per test 256 megabytes input standar ...
- java例题_50 题目:有五个学生,每个学生有 3 门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成 绩),计算出平均成绩,将原有的数据和计算出的平均分数存放在磁盘文件"stud"中。
1 /*50 [程序 50 文件 IO] 2 题目:有五个学生,每个学生有 3 门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成 3 绩),计算出平均成绩,将原有的数据和计算出的平均分数存放 ...
- 【移动适配】移动Web怎么做屏幕适配(三)
复杂纷扰的世界背后,总会有万变不离其宗的简单规则 啃先生 Mar.8th.2016 壹 | Fisrt 前面写了两篇移动适配相关的文章: <移动Web怎么做屏幕适配(一)>重点介绍了怎样利 ...
- [持久更新] 剑指offer题目Python做题记录
第一题 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 思路:先快速定位到 ...
- Java面试题精选(三) JSP/Servlet Java面试逻辑题
-- JSP/Servlet Java面试逻辑题 -- 很显然,Servlet/JSP的WEB前端动态制作的重要性比HTML/CSS/JS的价值高很多,但我们都知道他们都是建立在HT ...
随机推荐
- Python字符串转十六进制进制互转
def str_to_hex(s): return ' '.join([hex(ord(c)).replace('0x', '') for c in s]) def hex_to_str(s): ) ...
- kubernetes(K8S)集群及Dashboard安装配置
环境准备 机器信息 主机名 操作系统 IP地址 K8sm-218 Centos 7.5-x86_64 172.17.0.218 k8s-219 Centos 7.5-x86_64 172.17.0.2 ...
- ubuntu16.04安装opencv3.4.1教程
最近opencv3.4.1发布了,想换个新的试试鲜,于是把配置的过程通过博文的方式记录下来,方便查阅. 本教程原为3.3.0,但经过博主亲测,3.4.0.3.4.1皆适用 1.去官网下载opencv, ...
- 关于解决'\u'开头的字符串转中文的方法
如果字符串是”\u70ed\u95e8\u94ed\u6587\u63a8\u8350”这种形式的字符串: python3的解决办法:字符串.encode(‘utf-8’).decode(‘unico ...
- currency
currency 美 ['kʌrənsi] 英 ['kʌrənsi] n.货币:通货:通用:流行 网络流通:货币型:币种
- Qt类关系一览表
- 基于Docker + Consul + Nginx + Consul-Template的服务负载均衡实现(转)
转:https://www.jianshu.com/p/fa41434d444a 前言 上一篇文章使用 Consul 和 Registrator 在 docker 的容器环境中搭建了服务注册和发现集群 ...
- ztree checkbox父子联动
1. 对于ztree而言,如果需要设置或者取消ztree的父子联动,只要在setting里面设置chkboxType的参数即可: 其中Y表示被checkbox被勾选时的联动情况,N表示取消勾选时的联动 ...
- 【转】Python常见web系统返回码
responses = { 100: ('Continue', 'Request received, please continue'), 101: ('Switching Protocols', ' ...
- shell编程系列17--文本处理三剑客之awk动作中的表达式用法
shell编程系列17--文本处理三剑客之awk动作中的表达式用法 awk动作表达式中的算数运算符 awk动作中的表达式用法总结: 运算符 含义 + 加 - 减 * 乘 / 除 % 模 ^或** 乘方 ...