java高级---->Thread之Phaser的使用
Phaser提供了动态增parties计数,这点比CyclicBarrier类操作parties更加方便。它是jdk1.7新增的类,今天我们就来学习一下它的用法。尘埃落定之后,回忆别来挑拨。
Phaser的简单使用
Phaser的arriveAndAwaitAdvance方法使用
package com.linux.thread.thread;
import java.util.concurrent.Phaser;
public class PhaserRun1 {
public static void main(String[] args) {
Phaser phaser = new Phaser(3);
for (int i = 0; i < 3; i++) {
ThreadA threadA = new ThreadA(phaser);
threadA.start();
}
}
static class ThreadA extends Thread {
private Phaser phaser;
public ThreadA(Phaser phaser) {
this.phaser = phaser;
}
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + " A begin " + System.currentTimeMillis());
phaser.arriveAndAwaitAdvance();
System.out.println(Thread.currentThread().getName() + " A end " + System.currentTimeMillis());
}
}
}
一次运行的结果如下:
Thread-0 A begin 1501381934550
Thread-1 A begin 1501381934550
Thread-2 A begin 1501381934550
Thread-1 A end 1501381934550
Thread-2 A end 1501381934550
Thread-0 A end 1501381934560
修改上述的main方法的代码如下:
public static void main(String[] args) throws InterruptedException{
Phaser phaser = new Phaser(3);
phaser.register();
for (int i = 0; i < 3; i++) {
ThreadA threadA = new ThreadA(phaser);
threadA.start();
}
Thread.sleep(5000);
phaser.arriveAndDeregister();
}
运行的效果如下:
通过若干个方法来控制多个线程之间同步运行的效果,还可以实现针对某一个线程取消同步运行的效果,而且支持在指定屏障处等待,在等待时还支持中断或非中断等功能,使用Java并发类对线程进行分组同步控制时,Phaser比CyclicBarrier类功能更加强大,建议使用。
作者:
huhx
出处: www.cnblogs.com/huhx
格言:你尽力了,才有资格说自己的运气不好。
版权:本文版权归作者huhx和博客园共有,欢迎转载。未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
出处: www.cnblogs.com/huhx
格言:你尽力了,才有资格说自己的运气不好。
版权:本文版权归作者huhx和博客园共有,欢迎转载。未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。