JUC--Parser

Java 7的并发包中推出了[size=medium][b]Phaser[/b][/size],其功能跟CyclicBarrier和CountDownLatch有些重叠,但是提供了更灵活的用法,例如支持动态调整注册任务的数量等

别人的牛逼的blok: [url]http://whitesock.iteye.com/blog/1135457[/url]


package com.test.uuu;

import java.util.concurrent.Phaser;

/**
* Phaser:阶段的意思
* 有两个概念:phase & party ,phase 表明当前执行的阶段,party当前注册了的线程数量
* <p/>
* 创建三个线程分别打印从'a'开始的的字母表,每个字母打印十次,
* 三个线程打印完之后在继续打印,知道26个字母打印完
* 打印结果如下
*/
public class PhaserTest {
public static void main(String[] args) {
System.out.println("start");
Phaser phaser = new Phaser(3) {
//1. return true -> parser就会终止
//2. 每一个阶段执行完都会调用onAdvance
@Override
protected boolean onAdvance(int phase, int registeredParties) {
System.out.printf("\n======phase : %s , parties : %s============分割线========================\n", phase, registeredParties);
return registeredParties == 1; // 表示parser注册的线程数为1的时候终止parser
// return phase >=3; //表示执行完第四阶段就会终止parser
}
};
//PhaserTest.PhaserThread s = new PhaserTest().new PhaserThread('c',null);
for (int i = 0; i < 3; i++) {
//顺便复习下 内部类 和 静态内部类 初始化的知识
new Thread(new PhaserTest().new PhaserThread((char) ('a' + i), phaser)).start();
}
//主线程注册到phaser中
phaser.register();
while (!phaser.isTerminated()) {
phaser.arriveAndAwaitAdvance();
}
System.out.println("end");
}

class PhaserThread implements Runnable {
private char letter;
private Phaser phaser;
public PhaserThread(char letter, Phaser phaser) {
this.letter = letter;
this.phaser = phaser;
}
public void run() {
while (!phaser.isTerminated()) {
for (int i = 0; i < 10; i++) {
System.out.print(letter + " ");
}
letter = (char) (letter + 3);
if (letter > 'z') {
//取消当前线程的注册
phaser.arriveAndDeregister();
break;
} else {
//执行完当前阶段,等待下一阶段
phaser.arriveAndAwaitAdvance();
}
}
}
}
}



[size=medium][b]结果如下[/b][/size]
start
a a a b b b b b b b b b b a a a a a a a c c c c c c c c c c
======phase : 0 , parties : 4============分割线========================
f d f e e e e e e e e e e f d f d f d d d d d d d f f f f f
======phase : 1 , parties : 4============分割线========================
i i i i i i i i i i g g g g g g g g g g h h h h h h h h h h
======phase : 2 , parties : 4============分割线========================
k k k k k l j j l k l j l k k k l l l l l l j k j j j j j j
======phase : 3 , parties : 4============分割线========================
m m m m m m m o n o m o o o o o n n n n n n o o o m n n n m
======phase : 4 , parties : 4============分割线========================
p q q q q q q q q q q r p r p r p r p p p r p r p p r r r r
======phase : 5 , parties : 4============分割线========================
u s s s t s s s u s t s u s s t u t u t u t u t u u u t t t
======phase : 6 , parties : 4============分割线========================
w w w w w w w w w w v x x x x x x x x x x v v v v v v v v v
======phase : 7 , parties : 3============分割线========================
y y z z z y z y z z z z z z y y y y y y
======phase : 8 , parties : 1============分割线========================
end
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值