zoukankan      html  css  js  c++  java
  • 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类功能更加强大,建议使用。

    友情链接

  • 相关阅读:
    Global.asax 文件是什么
    C和C++语言学习总结
    iphone窗口传值
    c语言实现队列
    iphone窗口跳转
    NSStirng、NSArray、 文件 以及枚举(Method小集合)
    服务器接受的链接过多,该怎么处理
    c语言实现单链表
    iphone开发 NSXMLParser解析xml文件
    iphone 切换界面
  • 原文地址:https://www.cnblogs.com/huhx/p/baseusejavaPhaser.html
Copyright © 2011-2022 走看看