Phaser 工作方式与CyclicBarrier类似,但是可以定义多个阶段

Stella981
• 阅读 639
import java.util.concurrent.Phaser;

/**
 * Created by zyBourn on 15/12/25.
 */
public class Entity {
    /**
     * 工作方式与CyclicBarrier类似,但是可以定义多个阶段
     * Phaser()/Phaser(int num):使用指定0/num个party创建Phaser
     * register():注册party
     * arriveAndAdvance():到达时等待到所有party到达
     * arriveAndDeregister():到达时注销想成自己
     */
    public static void main(String[] args) {
        Phaser phaser=new Phaser(1);
        new Worker(phaser,"厨师").start();
        new Worker(phaser,"服务员").start();
        new Worker(phaser,"传菜员").start();
        for (int i=1;i<=3;i++){
            phaser.arriveAndAwaitAdvance();
            System.out.println("订单"+i+"完成!");
        }
        phaser.arriveAndDeregister();
        System.out.println("处理完成");
    }

}

class Worker extends Thread{
    private Phaser phaser;
    public Worker(Phaser phaser,String name){
        setName(name);
        this.phaser=phaser;
        phaser.register();
    }
    public void run(){
        for (int i = 0; i <=3; i++) {
            System.out.println("当前的订单是:"+i+":"+getName());
            if (i==3){
                phaser.arriveAndDeregister();
            }else {
                phaser.arriveAndAwaitAdvance();
            }
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
点赞
收藏
评论区
推荐文章
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Easter79 Easter79
3年前
springboot学习总结(九)Spring security原理浅谈
认证是由AuthenticationManager来管理的,但是真正进行认证的是AuthenticationManager中定义的AuthenticationProvider。AuthenticationManager中可以定义有多个AuthenticationProvider。当我们使用authenticationprovider元素来
Stella981 Stella981
3年前
Egret之egret.gui.List的使用教程
工具:EgretWing说明:List         列表组件ItemRender   列表Item组件这里只讲解一下如何绑定数据到List以及对应到ItemRender展示。/  Created by haocao on 15/6/25. /class 
Wesley13 Wesley13
3年前
Java CyclicBarrier介绍
CyclicBarrier(周期障碍)类可以帮助同步,它允许一组线程等待整个线程组到达公共屏障点。CyclicBarrier是使用整型变量构造的,其确定组中的线程数。当一个线程到达屏障时(通过调用CyclicBarrier.await()),它会被阻塞,直到所有线程都到达屏障,然后在该点允许所有线程继续执行。与CountDownLatch不同的
Stella981 Stella981
3年前
CyclicBarrier 循环屏障
import java.util.concurrent.BrokenBarrierException;import java.util.concurrent.CyclicBarrier;/  Created by zyBourn on 15/12/25. /public class 
Wesley13 Wesley13
3年前
Java面试笔试
!(https://oscimg.oschina.net/oscnet/3e87555491e165e53a5aef2c357a7d62d9c.png"微信公众号:JavaWeb架构师")微信公众号:JavaWeb架构师描述一个Java文件中可以定义多个类,但是最多只能有一个类被public修饰,并且这个类的类名与文件名必须相
Wesley13 Wesley13
3年前
JAVA初学笔记&宋红康JAVA基础、高级篇(其九)
关于类与方法的使用技巧方法重载定义:同一个类中,允许多个同名方法,只需所传递的参数类型不同即可(类似于路由系统)使用:根据传递的类型自动区分到对应的方法值传递多个实参传递JDK5.0之前:publicstaticvoidtest(inta,Str
Stella981 Stella981
3年前
Javascript中,实现类与继承的方法和优缺点分析
Javascript是一种弱类型语言,不存在类的概念,但在js中可以模仿类似于JAVA中的类,实现类与继承第一种方法:利用Javascript中的原型链1//首先定义一个父类23functionAnimal(name,age){4//定义父类的属性5thi
Stella981 Stella981
3年前
CountDownLatch 计数栓
import java.util.concurrent.CountDownLatch;/  Created by zyBourn on 15/12/25. /public class Entity {    public static void main(String args)
Wesley13 Wesley13
3年前
unity将 -u4E00 这种 编码 转汉字 方法
 unity中直接使用 JsonMapper.ToJson(对象),取到的字符串,里面汉字可能是\\u4E00类似这种其实也不用转,服务器会通过类似fastjson发序列化的方式,将json转对象,获取对象的值就是中文但是有时服务器要求将传参中字符串中类似\\u4E00这种转汉字,就需要下面 publ