文档章节

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

噼里啪啦嘣
 噼里啪啦嘣
发布于 2016/05/08 20:33
字数 191
阅读 18
收藏 0
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();
            }
        }
    }
}


© 著作权归作者所有

上一篇: Semaphore信号量
下一篇: lock
噼里啪啦嘣

噼里啪啦嘣

粉丝 1
博文 30
码字总数 8391
作品 0
杭州
后端工程师
私信 提问
JAVA 并发体系概览

Java并发包主要有以下部分构成: 同步对象 主要提供多个线程以何种方式进行通信协作 执行器 管理多线程,提供线程运行入口 锁 控制线程访问资源的顺序 原子操作 对Java的基本类型进行了封装,...

二两豆腐
2016/12/19
85
0
线程间通信剖析

CountDownLatch CountDownLatch适用场景 Java多线程编程中经常会碰到这样一种场景——某个线程需要等待一个或多个线程操作结束(或达到某种状态)才开始执行。比如开发一个并发测试工具时,主...

李矮矮
2016/10/17
6
0
Fork-Join及Phaser

1、Fork-Join fork/join是java7更新的一个新的轻量级任务执行框架,其主要目的是要更好滴利用底层平台上的多核CPU和多处理器来进行并行处理,解决问题时通常采用分治(divide and conquer)算...

xixicat
2014/08/06
103
0
JDK7中的Phaser

JDK7对并发编程提供了更好的支持,包括ThreadLocalRandom、ForkJoinPool、TransferQueue以及本文要讲述的Phaser。 JDK5中引入了CyclicBarrier和CountDownLatch这两个并发控制类,而JDK7中引入...

鉴客
2011/12/30
477
0
Java多线程编程之同步器

同步器 为每种特定的同步问题提供了解决方案 Semaphore Semaphore【信号标;旗语】,通过计数器控制对共享资源的访问。 测试类: 线程写法: 执行结果【以下所有输出结果中[]中为线程名称- 后...

拿客-三产
2016/08/11
6.3K
2

没有更多内容

加载失败,请刷新页面

加载更多

JS基础-该如何理解原型、原型链?

JS的原型、原型链一直是比较难理解的内容,不少初学者甚至有一定经验的老鸟都不一定能完全说清楚,更多的"很可能"是一知半解,而这部分内容又是JS的核心内容,想要技术进阶的话肯定不能对这个...

OBKoro1
今天
6
0
高防CDN的出现是为了解决网站的哪些问题?

高防CDN是为了更好的服务网络而出现的,是通过高防DNS来实现的。高防CDN是通过智能化的系统判断来路,再反馈给用户,可以减轻用户使用过程的复杂程度。通过智能DNS解析,能让网站访问者连接到...

云漫网络Ruan
今天
14
0
OSChina 周一乱弹 —— 熟悉的味道,难道这就是恋爱的感觉

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @xiaoshiyue :好久没分享歌了分享张碧晨的单曲《今后我与自己流浪》 《今后我与自己流浪》- 张碧晨 手机党少年们想听歌,请使劲儿戳(这里)...

小小编辑
今天
2.9K
24
SpringBoot中 集成 redisTemplate 对 Redis 的操作(二)

SpringBoot中 集成 redisTemplate 对 Redis 的操作(二) List 类型的操作 1、 向列表左侧添加数据 Long leftPush = redisTemplate.opsForList().leftPush("name", name); 2、 向列表右......

TcWong
今天
46
0
排序––快速排序(二)

根据排序––快速排序(一)的描述,现准备写一个快速排序的主体框架: 1、首先需要设置一个枢轴元素即setPivot(int i); 2、然后需要与枢轴元素进行比较即int comparePivot(int j); 3、最后...

FAT_mt
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部