码迷,mamicode.com
首页 > 编程语言 > 详细

java高级---->Thread之Phaser的使用

时间:2017-07-31 10:04:37      阅读:217      评论:0      收藏:0      [点我收藏+]

标签:psi   rdd   vsr   UI   cgo   odm   dsr   adt   cow   

  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类功能更加强大,建议使用。

 

友情链接

 

java高级---->Thread之Phaser的使用

标签:psi   rdd   vsr   UI   cgo   odm   dsr   adt   cow   

原文地址:http://www.cnblogs.com/huhx/p/baseusejavaPhaser.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!