package com.yzu.zhang.thread.concurrent;

import java.util.Map.Entry;
import java.util.Random;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; /**
* 银行流水处理服务类
* @date 2016年11月21日
*/
public class BankCountService implements Runnable{ private int threadCount = 4; private Random random = new Random(); /**
* 创建4个屏障类,都处理完之后执行当前类的run方法
*/
private CyclicBarrier c = new CyclicBarrier(threadCount, this); private ExecutorService executor = Executors.newFixedThreadPool(threadCount); private ConcurrentHashMap<String, Integer> countMap = new ConcurrentHashMap<String, Integer>(); /**
* 开启线程池进行计算
*/
private void count() {
System.out.println(">>>>>开始计算>>>>>");
for (int i = 0; i < threadCount; i++) {
executor.execute(new Runnable() { @Override
public void run() {
//计算当前sheet的银行流水,模拟计算
int value = random.nextInt(10000);
try {
Thread.sleep(value);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
String threadName = Thread.currentThread().getName();
countMap.put(threadName, value);
System.out.println("["+threadName+"]计算完成:"+value+", 等待汇总..."); //银行流水计算完成,插入一个屏蔽,等待其他线程的计算
try {
c.await();
} catch (Exception e) {
e.printStackTrace();
}
} });
}
} @Override
public void run() {
int total = 0;
System.out.println("开始汇总...");
//汇总结果
for( String key : countMap.keySet() ) {
total += countMap.get(key);
} for(Entry<String,Integer> entry : countMap.entrySet()) {
//total += entry.getValue().intValue();
} //将结果输出
System.out.println("银行总流水==="+total); //关闭线程池
if (executor != null) {
executor.shutdown();
System.out.println(">>>>>计算结束>>>>>");
}
} public static void main(String[] args) {
BankCountService service = new BankCountService();
service.count();
}
}

运行结果:

>>>>>开始计算>>>>>
[pool-1-thread-1]计算完成:750, 等待汇总...
[pool-1-thread-2]计算完成:6426, 等待汇总...
[pool-1-thread-4]计算完成:6538, 等待汇总...
[pool-1-thread-3]计算完成:9430, 等待汇总...
开始汇总...
银行总流水===23144
>>>>>计算结束>>>>>

CyclicBarrier实现流水处理服务类的更多相关文章

  1. 【思路】-OctService服务类

    OctService服务类 从以下几个方面来说吧,这次说的会有点长啊 设计: 思路: 作用: 目的: 问题: 为什么要设计这个? 它解决了什么问题? 是什么? 为什么? 怎么样? OctService ...

  2. Liferay7 BPM门户开发之34: liferay7对外服务类生成(RestService Get Url)

    在liferay7中开发不依赖Service Builder的对外服务类,非常简洁,只需要2点注解: 在类的前部定义: @ApplicationPath("/PathXXX") 方 ...

  3. Android 服务类Service 的详细学习

    http://blog.csdn.net/vipzjyno1/article/details/26004831 Android服务类Service学习四大组建   目录(?)[+] 什么是服务 服务有 ...

  4. Nmap扫描教程之DNS服务类

    Nmap扫描教程之DNS服务类 Nmap DNS服务类 DNS(Domain Name System,域名系统)的作用就是将主机名解析为相应IP地址的过程. 通常主机域名的一般结构为:主机名.三级域名 ...

  5. Android 服务类Service 的具体学习

    上一篇说到了通知栏Notification,提起通知栏,不得让人想到Service以及BroadcastReceive,作为android的4大组建的2个重要成员,我们没少和它们打交道.它们能够在无形 ...

  6. C# 利用VS自带的WSDL工具生成WebService服务类

    C# 利用VS自带的WSDL工具生成WebService服务类   WebService有两种使用方式,一种是直接通过添加服务引用,另一种则是通过WSDL生成. 添加服务引用大家基本都用过,这里就不讲 ...

  7. 第十二节: 总结Quartz.Net几种部署模式(IIS、Exe、服务部署【借助TopSelf、服务类】)

    一. IIS部署 比如在MVC框架中集成了Quartz.Net定时调度,此时该调度系统会随着MVC框架被挂在IIS下,IIS会进程回收,所以大部分开发都会遇到Quartz挂在IIS下一段时间不好用. ...

  8. 微信小程序个人/企业开放服务类目一览表

    微信小程序个人/企业开放服务类目一览表   微信小程序个人开放服务类目表 服务类目 类目分类一 类目分类二 引导描述 出行与交通 代驾 / / 生活服务 家政.丽人.摄影/扩印.婚庆服务.环保回收/废 ...

  9. WorldWind源码剖析系列:地形瓦片类TerrainTile和地形瓦片服务类TerrainTileService

    地形瓦片类TerrainTile 用来抽象封装用户漫游中所请求的地形瓦片数据类型. 地形瓦片服务类TerrainTileService提供了从BIL(Binary Interleaved by Lin ...

随机推荐

  1. 查看系统负载:uptime

    uptime命令用于查看系统负载,跟 w 命令的输出内容一致 [root@localhost ~]$ uptime :: up days, :, users, load average: 0.03, ...

  2. Linux ulimit 命令

    ulimit命令用来限制系统用户对 shell 资源的访问,常见用法如下: [root@localhost ~]$ ulimit -a # 查看当前所有的资源限制 [root@localhost ~] ...

  3. 如何理解精通PHP ?

    「精通 PHP」可以理解为以下三个: 精通「PHP 解析器 精通「PHP 语法.函数(这门语言) 精通「PHP 项目开发 1 精通「PHP 解析器」 可以从这里开始学习: PHP核心:骇客指南 :ht ...

  4. Linux 启动文件、设置环境变量的位置

    系统级启动文件  ==================================== 1./etc/rc  主启动文件,不要修改它 2./etc/rc.conf  决定启动哪些系统自带的守护进程 ...

  5. Android 7.1.1 系统截屏

    frameworks/base/packages/SystemUI/src/com/android/systemui/screenshot/TakeScreenshotService.java Tak ...

  6. [转帖]双剑合璧:CPU+GPU异构计算完全解析

    引用自:http://tech.sina.com.cn/mobile/n/2011-06-20/18371792199.shtml 这篇文章写的深入浅出,把异构计算的思想和行业趋势描述的非常清楚,难得 ...

  7. Scikit Learn安装教程

    Windows下安装scikit-learn 准备工作 Python (>= 2.6 or >= 3.3), Numpy (>= 1.6.1) Scipy (>= 0.9), ...

  8. 从零打造在线网盘系统之Hibernate框架起步

    欢迎浏览Java工程师SSH教程从零打造在线网盘系统系列教程,本系列教程将会使用SSH(Struts2+Spring+Hibernate)打造一个在线网盘系统,本系列教程是从零开始,所以会详细以及着重 ...

  9. 国外DNS服务器总结

    国外12个免费的DNS DNS(即Domain Name System,域名系统),是因特网上作为域名和IP地址相互映射的一个分布式数据库,能够让用户更方便的访问互联网,而不用去记住能够被机器直接读取 ...

  10. poj2376 Cleaning Shifts【线段树】【DP】

    Cleaning Shifts Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 32561   Accepted: 7972 ...