CyclicBarrier实现流水处理服务类
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实现流水处理服务类的更多相关文章
- 【思路】-OctService服务类
OctService服务类 从以下几个方面来说吧,这次说的会有点长啊 设计: 思路: 作用: 目的: 问题: 为什么要设计这个? 它解决了什么问题? 是什么? 为什么? 怎么样? OctService ...
- Liferay7 BPM门户开发之34: liferay7对外服务类生成(RestService Get Url)
在liferay7中开发不依赖Service Builder的对外服务类,非常简洁,只需要2点注解: 在类的前部定义: @ApplicationPath("/PathXXX") 方 ...
- Android 服务类Service 的详细学习
http://blog.csdn.net/vipzjyno1/article/details/26004831 Android服务类Service学习四大组建 目录(?)[+] 什么是服务 服务有 ...
- Nmap扫描教程之DNS服务类
Nmap扫描教程之DNS服务类 Nmap DNS服务类 DNS(Domain Name System,域名系统)的作用就是将主机名解析为相应IP地址的过程. 通常主机域名的一般结构为:主机名.三级域名 ...
- Android 服务类Service 的具体学习
上一篇说到了通知栏Notification,提起通知栏,不得让人想到Service以及BroadcastReceive,作为android的4大组建的2个重要成员,我们没少和它们打交道.它们能够在无形 ...
- C# 利用VS自带的WSDL工具生成WebService服务类
C# 利用VS自带的WSDL工具生成WebService服务类 WebService有两种使用方式,一种是直接通过添加服务引用,另一种则是通过WSDL生成. 添加服务引用大家基本都用过,这里就不讲 ...
- 第十二节: 总结Quartz.Net几种部署模式(IIS、Exe、服务部署【借助TopSelf、服务类】)
一. IIS部署 比如在MVC框架中集成了Quartz.Net定时调度,此时该调度系统会随着MVC框架被挂在IIS下,IIS会进程回收,所以大部分开发都会遇到Quartz挂在IIS下一段时间不好用. ...
- 微信小程序个人/企业开放服务类目一览表
微信小程序个人/企业开放服务类目一览表 微信小程序个人开放服务类目表 服务类目 类目分类一 类目分类二 引导描述 出行与交通 代驾 / / 生活服务 家政.丽人.摄影/扩印.婚庆服务.环保回收/废 ...
- WorldWind源码剖析系列:地形瓦片类TerrainTile和地形瓦片服务类TerrainTileService
地形瓦片类TerrainTile 用来抽象封装用户漫游中所请求的地形瓦片数据类型. 地形瓦片服务类TerrainTileService提供了从BIL(Binary Interleaved by Lin ...
随机推荐
- callable()
callable() 用于判断一个对象是否是可调用的,函数或类都可以被调用 In [1]: callable('a') Out[1]: False In [2]: def fun(): ...: pa ...
- PyQt4日历部件QXalendarWidget
QCalendarWidget类提供了以月为单位地日历部件.该部件允许用户以一种简单而直接的方式选择日期. #!/usr/bin/python # -*- coding: utf-8 -*- impo ...
- ubuntu 备忘
卷组扩容 Linux mint采用默认卷组的安装方式 sain@Linux ~ $ df -hl Filesystem Size Used Avail Use% Mounted on udev .7G ...
- 【java】将List中的实体按照某个字段进行分组的算法
如何将List中存放的实体按照某个字段进行分组呢?来看看下面的例子,假如实体中有个字段叫批次号,我们将具有相同批次号的实体放在一起,那么怎么实现呢?看下面的代码: 可以定义个Map,Map的key用于 ...
- MQTT的学习研究(六) MQTT moquette 的 Blocking API 订阅消息客户端使用
* 使用 Java 为 MQ Telemetry Transport 创建订户 * 在此任务中,您将遵循教程来创建订户应用程序.订户将针对主题创建预订并接收该预订的发布. * 提供了一个示例订户应用程 ...
- hdu5305 Friends[状压dp]
Friends Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Su ...
- 【BZOJ3362-3365】USACO水题四连A
[BZOJ3362][Usaco2004 Feb]Navigation Nightmare 导航噩梦 Description 农夫约翰有N(2≤N≤40000)个农场,标号1到N,M(2≤M≤ ...
- eclipse启动报错 Problems occurred when invoking code from plug-in: "org.eclipse.jface"
eclipse在使用中可能会发生错误: Problems occurred when invoking code from plug-in: "org.eclipse.jface" ...
- Linux squid 缓存服务器
一.简介 代理服务器英文全称是Proxy Server,其功能就是代理网络用户去取得网络信息. Squid是一个缓存Internet 数据的软件,其接收用户的下载申请,并自动处理所下载的数据.当一个用 ...
- 使用Navicat连接Mysql报错:can not get hostname for your address
以管理员的身份使用cmd命令运行netsh winsock reset即可!