/**
* 可用用phaser模拟countDownLatch
* awaitAdvance方法:如果传入的参数和当前的phase相等,线程就阻塞住等待phase的值增加;否则就立即返回
*/
public class PhaserTest2 { private static Random random = new Random(System.currentTimeMillis()); public static void main(String[] args) throws InterruptedException {
Phaser phaser = new Phaser();
for (int i = ; i <= ; i++) {
new AwaitAdvanceTask(i, phaser).start();
}
System.out.println("before: "+phaser.getPhase());
int result = phaser.awaitAdvance(phaser.getPhase());
System.out.println("after: "+phaser.getPhase());
System.out.println("i = "+result);
} static class AwaitAdvanceTask extends Thread { private int no;
private Phaser phaser; AwaitAdvanceTask(int no, Phaser phaser) {
this.no = no;
this.phaser = phaser;
} @Override
public void run() {
try {
Thread.sleep(random.nextInt());
System.out.println(no + " has worked done");
phaser.arriveAndAwaitAdvance();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}

Phaser也可以实现countdownLatch的功能的更多相关文章

  1. Java并发之CountDownLatch 多功能同步工具类

    package com.thread.test.thread; import java.util.Random; import java.util.concurrent.*; /** * CountD ...

  2. 【Java并发核心三】CountDownLatch、CyclicBarrier及Phaser

    个人感觉,看书学习还是需要“不求甚解”,因为一旦太过于计较小的得失,就容易钻牛角尖,学习进度也慢.我们完全可以先学一个大概,等到真正用到的时候再把那些细节丰富起来,就更有针对性. 所以,针对java并 ...

  3. 【Java并发编程实战】-----“J.U.C”:Phaser

    Phaser由java7中推出,是Java SE 7中新增的一个使用同步工具,在功能上面它与CyclicBarrier.CountDownLatch有些重叠,但是它提供了更加灵活.强大的用法. Cyc ...

  4. 同步工具类 CountDownLatch 和 CyclicBarrier

    在开发中,一些异步操作会明显加快执行速度带来更好的体验,但同时也增加了开发的复杂度,想了用好多线程,就必须从这些方面去了解 线程的 wait() notify() notifyall() 方法 线程异 ...

  5. JDK源码分析之concurrent包(四) -- CyclicBarrier与CountDownLatch

    上一篇我们主要通过ExecutorCompletionService与FutureTask类的源码,对Future模型体系的原理做了了解,本篇开始解读concurrent包中的工具类的源码.首先来看两 ...

  6. java高并发之CountDownLatch,CyclicBarrier和join

    晚上打车回家,在车上看到一篇文章<22岁大学生获谷歌天价Offer,年薪千万!>,讲的是印度一个22岁大学生多次参加ACM大赛,开源多个项目,以非常牛逼的履历通过了谷歌的AI测试,斩获谷歌 ...

  7. Java多线程编程之同步器

    同步器 为每种特定的同步问题提供了解决方案 Semaphore Semaphore[信号标:旗语],通过计数器控制对共享资源的访问. 测试类: package concurrent; import c ...

  8. jdk7和8的一些新特性介绍

    jdk7和8的一些新特性介绍 本文是我学习了解了jdk7和jdk8的一些新特性的一些资料,有兴趣的大家可以浏览下下面的内容. 官方文档:http://www.oracle.com/technetwor ...

  9. jdk1.7和jdk1.8区别

    转自:http://www.2cto.com/kf/201307/225968.html 本文是我学习了解了jdk7和jdk8的一些新特性的一些资料,有兴趣的大家可以浏览下下面的内容. 官方文档:ht ...

随机推荐

  1. jsonp格式前端发送和后台接受写法

    jsonp是ajax提交的一种格式不会受跨域限制 一.前端发送 <button>11111</button> <script src="https://cdn. ...

  2. PHP实现简单RPC

    1.什么是rpc RPC全称为Remote Procedure Call,翻译过来为“远程过程调用”.目前,主流的平台中都支持各种远程调用技术,以满足分布式系统架构中不同的系统之间的远程通信和相互调用 ...

  3. Dikstra 堆优化板子

    #include <bits/stdc++.h> #define MAXN 10005 using namespace std; typedef long long LL; vector& ...

  4. JSON Web Token 使用详解

    JWT 是什么? JSON Web Token(缩写 JWT)是目前最流行的跨域认证解决方案.它是有三部分组成,示例如下,具体的讲解如下(jwt 是不会有空行的,下面只是为了显示,便使用了换行看着比较 ...

  5. SQL Server 使用union all查询多个条件数据合并分组显示,同比统计

    ),a.created_yearmonth,) created_yearmonth, a.countaccount countaccount, a.yxsl yxsl, a.sccdsl sccdsl ...

  6. 解决eclipse中maven多模块项目显示不全的问题

    背景:在eclipse中导入maven项目,后来发现有的子模块不能正常的显示出现 原因:没有加载到子模块的pom文件 解决方法:重新导入:import-> 勾选项目->选择你缺少的项目的p ...

  7. c# 第七节 编程规范,vs中的各种设置

    本节内容: 1:编程规范 2:vs中的各种设置 3:一个解决方案多个项目的创建.使用 1:编程规范 需要规范的地方: 1: 2: 2:vs中的各种设置 实现: 3:一个解决方案多个项目的创建.使用

  8. c# 第六节 c#的程序结构,以及vs的文件结构

    本节内容: 1:c#的程序结构 2:深入了解vs的文件 1:c#的程序结构 实例: 2:深入了解vs的文件 三者的关系: 3:命令空间是什么 使用别名:

  9. 代码规范 & 数学之美读后感

    代码规范链接:https://zh-google-styleguide.readthedocs.io/en/latest/contents/ 数学之美读后感 一开始看名字我以为是一本讲数学是怎么发展的 ...

  10. TP5导入EXCEL到数据库

    前期准备工作: 1.下载PHPExcel放到vendor下 2.前端页面: <form action="save" method="post" encty ...