CylicBarrier使用之barrierAction优先执行
来源:互联网 发布:node 压力测试 编辑:程序博客网 时间:2024/05/17 04:23
package com.ilucky.test.jdk.util.concurrent;import java.util.Date;import java.util.concurrent.BrokenBarrierException;import java.util.concurrent.CyclicBarrier;/** * 优先执行: barrierAction * 用于在到达线程屏障时,优先执行barrierAction,方便处理更复杂的业务场景. * * 应用场景: * 比如我们用一个Excel保存了用户所有银行流水, 每个Sheet保存一个帐户近一年的每笔银行流水, 现在需要统计用户的日均银行流水, * 先用多线程处理每个sheet里的银行流水, 都执行完之后, 得到每个sheet的日均银行流水, 最后, 再用barrierAction用这些线程的计算结果, * 计算出整个Excel的日均银行流水。 * @author IluckySi * */public class CyclicBarrierTest3 { public static void main(String[] args) { CyclicBarrier cb = new CyclicBarrier(3, new CyclicBarrierTestT30()); new CyclicBarrierTestT31(cb).start(); new CyclicBarrierTestT32(cb).start(); new CyclicBarrierTestT33(cb).start(); }}class CyclicBarrierTestT31 extends Thread { private CyclicBarrier cb; CyclicBarrierTestT31(CyclicBarrier cb) { this.cb = cb; } public void run() { try { Thread.sleep(1000); System.out.println(new Date() + "计算: name =" + Thread.currentThread().getName()); cb.await(); Thread.sleep(1000); } catch (BrokenBarrierException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } //System.out.println(new Date() + "name =" + Thread.currentThread().getName()); }}class CyclicBarrierTestT32 extends Thread { private CyclicBarrier cb; CyclicBarrierTestT32(CyclicBarrier cb) { this.cb = cb; } public void run() { try { Thread.sleep(2000); System.out.println(new Date() + "计算: name =" + Thread.currentThread().getName()); cb.await(); Thread.sleep(1000); } catch (BrokenBarrierException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } //System.out.println(new Date() + "name =" + Thread.currentThread().getName()); }}class CyclicBarrierTestT33 extends Thread { private CyclicBarrier cb; CyclicBarrierTestT33(CyclicBarrier cb) { this.cb = cb; } public void run() { try { Thread.sleep(3000); System.out.println(new Date() + "计算: name =" + Thread.currentThread().getName()); cb.await(); Thread.sleep(1000); } catch (BrokenBarrierException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } //System.out.println(new Date() + "name =" + Thread.currentThread().getName()); }}class CyclicBarrierTestT30 extends Thread { public void run() { System.out.println("====优先执行===="); }}/**Fri May 12 11:41:43 GMT+08:00 2017计算: name =Thread-1Fri May 12 11:41:44 GMT+08:00 2017计算: name =Thread-2Fri May 12 11:41:45 GMT+08:00 2017计算: name =Thread-3====优先执行====*/
0 0
- CylicBarrier使用之barrierAction优先执行
- iOS之优先使用autorelease
- C++之优先使用抽象类
- STL之优先队列的使用
- Java学习笔记之—Static静态代码块,只执行一次,优先主函数执行。
- CyclicBarrier(int parties, Runnable barrierAction) 详解
- attach detach fragement 优先执行
- 程序执行的优先选择
- 数据结构之图(深度优先搜索和广度优先搜索使用的队列和栈)
- C++编程规范之28:优先使用++和—的标准形式。优先调用前缀形式
- 黑马程序员 同步辅助类[CylicBarrier]
- 数据结构之优先队列-Java PriorityQueue使用(3)
- STL之优先队列、队列、栈的使用
- Java学习之三种代码块优先使用顺序
- Android settings使用详解之设置优先网络
- Quartz使用之:远程job的执行
- STL之优先队列
- STL之优先队列
- 打印1到最大的n位数(java)
- if语句
- Ubuntu 15.04安装Node详解
- 在dialog中获取Edittext的值
- Map以及List<Map<t>>的排序问题
- CylicBarrier使用之barrierAction优先执行
- bootstrap轮播图插件
- Trie树静态建树模板
- CentOS下mysql远程连接的失败的解决方法
- 靠谱的TCP:三次握手和四次挥手
- PHP学习笔记——递归函数
- tensorflow 记错本
- 关于boost.regex库的编译问题(C/C++)
- [leetcode: Python]191.Number of 1 Bits