- 浏览: 1574623 次
- 来自: 上海
文章分类
- 全部博客 (374)
- Java (101)
- Struts (54)
- Oracle (30)
- JavaScript (16)
- Spring (27)
- Hibernate (16)
- MyEclipse (3)
- JSF (1)
- FreeMarker (2)
- SiteMesh (2)
- JfreeChart (2)
- Ibatis (2)
- JSP (12)
- MyBatis (4)
- SWFupload (1)
- EJB (4)
- Jboss (4)
- WebService (2)
- Linux (16)
- Android (2)
- XML (6)
- Java 网络编程 (13)
- AXIS2 (1)
- FTP (1)
- Jswing (1)
- Socket (3)
- 杂文选集 (6)
- solr (2)
- PS (1)
- Tomcat (7)
- JDBC (9)
- Highcharts (1)
- maven (1)
- Nodejs (0)
- navicat (2)
- Exception (5)
- eclipse (3)
- jQuery (1)
- springMVC (4)
- MySQL (11)
- SVN (1)
- Sql Server (1)
- zookeeper (1)
- JVM (1)
- Groovy (2)
- Git (1)
- Nginx (1)
- DynamicReport (1)
- IDEA (2)
- JasperReports (1)
- Postgresql (2)
- Mac (1)
- gradle (1)
- 数据结构算法 (1)
最新评论
-
hpu145:
引用引用
java 千分位的添加和去除 -
被遗忘的下路:
少了个junit-4.8.2的包
SSH2整合完整案例(四十三) -
白天看黑夜:
java过滤emoji字符处理,希望能帮到你http://ww ...
emoji 表情图片解决方法 -
caipeiming:
这个挺好JavaScript实现input输入框控件只允许输入 ...
js 控制文本框只能输入中文、英文、数字等 -
双子树:
东西太好啦受教啊
Struts2 JSP中将list,set ,Map传递到Action然后<s:iterator>遍历(三十五)
//一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarrier 很有用。因为该 barrier 在释放等待线程后可以重用,所以称它为循环 的 barrier。CyclicBarrier 支持一个可选的 Runnable 命令,在一组线程中的最后一个线程到达之后(但在释放所有线程之前),该命令只在每个屏障点运行一次。若在继续所有参与线程之前更新共享状态,此屏障操作 很有用。 //设置parties、count及barrierCommand属性。 CyclicBarrier(int): //当await的数量到达了设定的数量后,首先执行该Runnable对象。 CyclicBarrier(int,Runnable): //通知barrier已完成线程 await():
应用场景 在某种需求中,比如一个大型的任务,常常需要分配好多子任务去执行,只有当所有子任务都执行完成时候,才能执行主任务,这时候,就可以选择CyclicBarrier了。 实例分析 我们需要统计全国的业务数据。其中各省的数据库是独立的,也就是说按省分库。并且统计的数据量很大,统计过程也比较慢。为了提高性能,快速计算。我们采取并发的方式,多个线程同时计算各省数据,最后再汇总统计。在这里CyclicBarrier就非常有用。看代码: /** * 各省数据独立,分库存偖。为了提高计算性能,统计时采用每个省开一个线程先计算单省结果,最后汇总。 * */ public class Total { // private ConcurrentHashMap result = new ConcurrentHashMap(); public static void main(String[] args) { TotalService totalService = new TotalServiceImpl(); CyclicBarrier barrier = new CyclicBarrier(5, new TotalTask(totalService)); // 实际系统是查出所有省编码code的列表,然后循环,每个code生成一个线程。 new BillTask(new BillServiceImpl(), barrier, "北京").start(); new BillTask(new BillServiceImpl(), barrier, "上海").start(); new BillTask(new BillServiceImpl(), barrier, "广西").start(); new BillTask(new BillServiceImpl(), barrier, "四川").start(); new BillTask(new BillServiceImpl(), barrier, "黑龙江").start(); } } /** * 主任务:汇总任务 */ class TotalTask implements Runnable { private TotalService totalService; TotalTask(TotalService totalService) { this.totalService = totalService; } public void run() { // 读取内存中各省的数据汇总,过程略。 totalService.count(); System.out.println("======================================="); System.out.println("开始全国汇总"); } } /** * 子任务:计费任务 */ class BillTask extends Thread { // 计费服务 private BillService billService; private CyclicBarrier barrier; // 代码,按省代码分类,各省数据库独立。 private String code; BillTask(BillService billService, CyclicBarrier barrier, String code) { this.billService = billService; this.barrier = barrier; this.code = code; } public void run() { System.out.println("开始计算--" + code + "省--数据!"); billService.bill(code); // 把bill方法结果存入内存,如ConcurrentHashMap,vector等,代码略 System.out.println(code + "省已经计算完成,并通知汇总Service!"); try { // 通知barrier已经完成 barrier.await(); } catch (InterruptedException e) { e.printStackTrace(); } catch (BrokenBarrierException e) { e.printStackTrace(); } } }
结果: 开始计算--北京省--数据! 开始计算--上海省--数据! 北京省已经计算完成,并通知汇总Service! 开始计算--四川省--数据! 四川省已经计算完成,并通知汇总Service! 上海省已经计算完成,并通知汇总Service! 开始计算--广西省--数据! 广西省已经计算完成,并通知汇总Service! 开始计算--黑龙江省--数据! 黑龙江省已经计算完成,并通知汇总Service!
发表评论
-
检测一个字符串是否在jvm的常量池中
2018-12-18 17:34 948public static boolean inPool( ... -
UTC时间, GMT时间 ,夏令时
2017-08-18 15:12 2234经常混淆于此,特地研究了一下,记录在此以备忘。 整个地 ... -
java 反射List
2017-02-18 01:58 5600package com.enhance.reflect; ... -
JDK1.5 Exchange 两个线程互换数据
2016-08-04 18:00 915import java.util.concurrent ... -
JDK1.5 CountDownLatch
2016-08-04 16:25 1025/* * 还有一个利用场景: ... -
java 信号灯 Semaphore
2016-08-03 23:53 1792更多介绍http://blog.csdn.net/java20 ... -
java 使用读写锁设计一个缓存模型
2016-08-03 23:49 1374import java.util.HashMap; ... -
java 读写锁
2016-08-03 23:46 785import java.util.Random; i ... -
java 多个线程之间同步通信
2016-08-02 17:16 2371import java.util.concurrent ... -
jdk1.5 锁 Lock 和 Condition
2016-08-02 17:03 886// lock 练习 public class Lock ... -
JDK1.5 获取线程执行结果 Callable Future
2016-08-02 15:08 1133import java.util.Random; i ... -
JDK1.5 线程池
2016-08-02 14:48 768import java.util.concurrent ... -
java 多线程ThreadLocal
2016-08-02 00:13 1115import java.util.Random; ... -
java 定时器 Timer
2016-08-01 16:53 3850import java.util.Calendar; ... -
java 多线程同步+通信
2016-08-01 16:48 931/** *父子线程 交替打印10 次, 100次 ... -
java 线程同步
2016-08-01 16:43 983import java.util.concurrent.l ... -
java多线程练习
2016-08-01 16:35 1805Java 传统多线程 Java 多线程同步 Java 多线 ... -
java 传统多线程
2016-08-01 16:34 968/** * 传统多线程 */ public ... -
java 图片,剪切,缩放
2016-01-06 10:21 2181package out; import ja ... -
java术语(PO/POJO/VO/BO/DAO/DTO)
2014-11-27 11:45 1947PO(persistant object) 持久 ...
相关推荐
因为该barrier在释放等待线程后可以重用,所以称它为 循环 的barrier。 CyclicBarrier 支持一个可选的 Runnable命令,在一组线程中的最后一个线程到达之后(但在释放所有线程之前),该命令只在每个屏障点运行一...
主要介绍了Java并发实例之CyclicBarrier的使用,涉及CyclicBarrier的介绍,以及相关的并发实例,具有一定参考价值,需要的朋友可以了解下。
目录: 简介 1.1 并发编程与线程协作 1.2 CyclicBarrier概述 CyclicBarrier的基本用法...循环使用CyclicBarrier 4.1 场景介绍 4.2 使用CyclicBarrier循环使用 CyclicBarrier与CountDownLatch的对比 最佳实践与注意事项
主要介绍了java CyclicBarrier的相关资料,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
主要介绍了java多线程之CyclicBarrier的使用方法的相关资料,希望通过本文能帮助到大家,让大家理解掌握这部分内容,需要的朋友可以参考下
CyclicBarrier和CountDownLatch一样,都是关于线程的计数器。用法略有不同,测试代码如下:
CyclicBarrier是Java中的一个同步工具类,用于协调多个线程之间的同步。它的作用类似于CountDownLatch,可以让一个或多个线程等待其他线程执行完毕后再继续执行。 CyclicBarrier可以被看作是一个屏障,当所有线程都...
主要为大家详细分析了Java并发系列之CyclicBarrier源码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
java并发编程中CountDownLatch和CyclicBarrier的使用.pdf
《java并发编程》中CountDownLatch和CyclicBarrier用法实例大全,几乎包含了所有重要的用法
java并发编程中CountDownLatch和CyclicBarrier的使用借鉴.pdf
CyclicBarrier的使用以及注意事项
主要介绍了详解java CountDownLatch和CyclicBarrier在内部实现和场景上的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
13. 栅栏 CyclicBarrier 14. 交换机 Exchanger 15. 信号量 Semaphore 16. 执行器服务 ExecutorService 17. 线程池执行者 ThreadPoolExecutor 18. 定时执行者服务 ScheduledExecutorService 19. 使用 ForkJoinPool ...
主要介绍了Java并发编程(CyclicBarrier)实例详解的相关资料,JAVA编写并发程序的时候,我们需要仔细去思考一下并发流程的控制,如何让各个线程之间协作完成某项工作。
CyclicBarrier类似于CountDownLatch也是个计数器,不同的是CyclicBarrier数的是调用了CyclicBarrier.await()进入等待的线程数,当线程数达到了CyclicBarrier初始时规定的数目时,所有进入等待状态的线程被唤醒并继续...
CyclicBarrier循环栅栏; 重⼊锁可以完全替代synchronized关键字。在JDK5.0的早期版本中,重⼊锁的性能远远好于 synchronized,但从JDK6.0开始,JDK在synchronized上做了⼤量的优化,使得两者的性能差距并 不⼤。重...
『死磕Java并发编程系列』07 人齐了一起干CyclicBarrier 『死磕Java并发编程系列』08 限量供应Semaphore 『死磕Java并发编程系列』09 一手交钱一手交货Exchange 内存泄露的原因找到了,罪魁祸首居然是Java ...