- 浏览: 550797 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (344)
- ··············未分类············· (33)
- Eclipse 插件 (15)
- EDA 工具 (1)
- Linux/Unix (3)
- Java (43)
- Java Applet (1)
- Java Draw2d (22)
- Java Draw2d version2 (6)
- Java GEF (2)
- Java SWT (21)
- Java SWT Image 图像 (21)
- Java SWT Tree (16)
- Java SWT Table (4)
- Java SWT TableViewer (11)
- Java SWTbot (4)
- Java Test (2)
- Java Thread 多线程 (22)
- Java Zest (5)
- RC2_3S400学习笔记 (16)
- tcl 脚本 (10)
- Verilog (7)
- XML (6)
- 国家 (5)
- 感叹 (4)
- 面试题 (9)
- 生活 (36)
- 足球 世界杯 (8)
- 老公看你的 (3)
- web开发 (1)
- 数据结构——图 (7)
- c language (1)
最新评论
-
zxjlwt:
路过素人派http://surenpi.com
SWT 树的事件 SWT.Selection SWT.CHECK SWT.DefaultSelection -
hj01kkk:
1楼用法正解
JDK 7 中的 Fork/Join 模式 -
fish_no7:
使用 new SortTask().fork()
JDK 7 中的 Fork/Join 模式 -
wpf523:
mark
Java 多线程例子6 线程安全 线程同步 同步代码块 同步函数 -
uniquejava:
以前碰到过,估计是在icu包中实现了双击自动选中一段文本的功能 ...
java.lang.NoClassDefFoundError: com/ibm/icu/text/BreakIterator
原文:http://blog.csdn.net/qian_348840260/archive/2010/01/23/5247579.aspx
1,一个例子
/** * CyclicBarrier维持一个计数器,与CountDownLatch不同的是,等待这个CyclicBarrier的线程必须等到计数器 * 的某个值时,才可以继续. * CyclicBarrier就像它名字的意思一样,可看成是个障碍,所有的线程必须到齐后才能一起通过这个障碍. */ /** * 本实例实现一个数组相邻元素的加法,一个线程给数组的第一个元素赋值,然后等待其它线程给数组第二个元素赋值, * 然后将第一个元素和第二个元素相加. */ /** * CyclicBarrier的关键技术点如下: * 1.构造CyclicBarrier对象时,需要指定计数器的目标值,计数器的初始值为0. * 还可以在构造方法中带一个 Runnable参数,表示当计数器到达目标值是,在等待CyclicBarrier的线程被唤醒之前, * 指定该Runnable任务. * 2.CyclicBarrier的await方法使当前线程进入等待状态,同时将计数器值加1,当计数器到达目标值时,当前线程被唤醒. */ public class CyclicBarrierTest { public static class ComponentThread implements Runnable{ CyclicBarrier barrier;//计数器 int ID;//组件 int[] array; //数据数组 public ComponentThread(CyclicBarrier barrier,int[] array,int ID){ this.barrier = barrier; this.ID = ID; this.array = array; } public void run(){ try{ //Random的nextInt(int n)方法返回一个[0,n)范围内的随机数 array[ID] = new Random().nextInt(100); System.out.println("Componet " + ID + " sleep..."); barrier.await(); System.out.println("Componet " + ID + " awaked..."); //计算数据数组中的当前值和后续值 int result = array[ID] + array[ID + 1]; System.out.println("Component " + ID + " result: " + result); }catch(Exception ex){ } } } /**测试CyclicBarrier的用法*/ public static void testCyclicBarrier(){ final int[] array = new int[3]; CyclicBarrier barrier = new CyclicBarrier(2,new Runnable(){ public void run(){ System.out.println("testCyclicBarrier run..."); array[2] = array[0] + array[1]; System.out.println("Result: "+array[2]); } }); //启动线程 new Thread(new ComponentThread(barrier,array,0)).start(); new Thread(new ComponentThread(barrier,array,1)).start(); } public static void main(String... args){ CyclicBarrierTest.testCyclicBarrier(); } }
结果 写道
Componet 0 sleep...
Componet 1 sleep...
testCyclicBarrier run...
Result: 173
Componet 1 awaked...
Component 1 result: 253
Componet 0 awaked...
Component 0 result: 173
Componet 1 sleep...
testCyclicBarrier run...
Result: 173
Componet 1 awaked...
Component 1 result: 253
Componet 0 awaked...
Component 0 result: 173
注意:CyclicBarrier 到达计数后先执行自己的Runnable的方法。如,上面的结果先打印出testCyclicBarrier run... 后awake其他的线程。
2,又一个例子
原文:http://www.iteye.com/topic/657295 来自hardPass 的回复的例子也比较好:
public class CyclicBarrierTest { public static void main(String[] args) throws InterruptedException { ExecutorService exec = Executors.newCachedThreadPool(); final CyclicBarrier barrier = new CyclicBarrier(4, new Runnable() { public void run() { System.out.println("好了,大家可以去吃饭了……" ); } }); System.out.println("要吃饭,必须所有人都到终点,oK?"); System.out.println("不放弃不抛弃!"); for (int i = 0; i < 4; i++) { exec.execute(new Runnable() { public void run() { System.out.println(Thread.currentThread().getName() + ":Go"); try { Thread.sleep((long) (2000 * Math.random())); } catch (InterruptedException e1) { e1.printStackTrace(); } System.out.println(Thread.currentThread().getName()+ ":我到终点了"); try { barrier.await(); } catch (InterruptedException e) { e.printStackTrace(); } catch (BrokenBarrierException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + ":终于可以吃饭啦!"); } }); } exec.shutdown(); } }
结果 写道
要吃饭,必须所有人都到终点,oK?
不放弃不抛弃!
pool-1-thread-1:Go
pool-1-thread-3:Go
pool-1-thread-2:Go
pool-1-thread-4:Go
pool-1-thread-2:我到终点了
pool-1-thread-4:我到终点了
pool-1-thread-1:我到终点了
pool-1-thread-3:我到终点了
好了,大家可以去吃饭了……
pool-1-thread-2:终于可以吃饭啦!
pool-1-thread-4:终于可以吃饭啦!
pool-1-thread-1:终于可以吃饭啦!
pool-1-thread-3:终于可以吃饭啦!
不放弃不抛弃!
pool-1-thread-1:Go
pool-1-thread-3:Go
pool-1-thread-2:Go
pool-1-thread-4:Go
pool-1-thread-2:我到终点了
pool-1-thread-4:我到终点了
pool-1-thread-1:我到终点了
pool-1-thread-3:我到终点了
好了,大家可以去吃饭了……
pool-1-thread-2:终于可以吃饭啦!
pool-1-thread-4:终于可以吃饭啦!
pool-1-thread-1:终于可以吃饭啦!
pool-1-thread-3:终于可以吃饭啦!
发表评论
-
多线程的Wait返回它等待的下方
2014-08-15 14:16 518多线程的Wait返回它等待的下方。 Java Code ... -
多线程构造函数
2014-04-04 11:50 2044http://hi.baidu.com/tengxiaofe ... -
关于volatile
2013-01-28 13:24 574Volatile修饰的成员变量在每次被线程访问时,都强迫从共享 ... -
Java 多线程例子10 线程之间通信 wait notify notifyAll
2010-07-26 11:24 1274回答问题:http://www.iteye.com/probl ... -
java Thread 停止 开始 暂停
2010-07-23 15:07 241271,写了一个小程序: public class TestTh ... -
【转载】java Timer TimerTask
2010-07-22 11:31 17851,Timer Timer的实质上就是一个多线程,从它的类中 ... -
【转载】DelayQueue 的使用
2010-07-20 20:15 1295原文:http://ideasforjava.iteye.co ... -
java多线程 Semaphore CountDownLatch ScheduledExecutorService
2010-07-20 17:06 1800参考:http://www.ibm.com/developer ... -
java多线程 BlockingQueue 和 SynchronousQueues
2010-07-20 15:30 1424参考:http://www.ibm.com/developer ... -
利用多核CPU计算大的列表中的整数和 CyclicBarrier CountDownLatch ExecutorService
2010-07-20 14:12 1261原文:http://flysnow.iteye.c ... -
JDK 7 中的 Fork/Join 模式
2010-07-20 10:59 1814参考1:http://www.ibm.com/develope ... -
Java 多线程例子10 控制线程的生命 stop
2010-07-19 21:13 1275在Thread类中stop已经不推荐大家使用了,因为使用sto ... -
Java 多线程例子9 线程之间通信 wait notify notifyAll
2010-07-19 20:07 2816下面参照《Java就业培训教材》写了一个相似的线程之间通信的例 ... -
Java 多线程例子8 线程状态
2010-07-19 17:27 1194原文:http://shihaiyang.iteye.com/ ... -
Java 多线程例子7 线程安全 死锁
2010-07-19 17:07 1474死锁:在多个线程里对多个同步对象具有循环依赖时常会出现死锁。最 ... -
Java 多线程例子6 线程安全 线程同步 同步代码块 同步函数
2010-07-18 18:06 2217线程安全 出现线程安 ... -
Java 多线程例子5 实际例子的讨论
2010-07-18 15:18 9911,网络聊天程序,如QQ。 发送信息和接受信息肯定要连个线程 ... -
Java 多线程例子4 继承Thread 实现Runnable
2010-07-16 19:48 16751,Runnable例子 class ThreadDemo ... -
Java 多线程例子3 联合线程 join()
2010-07-16 17:57 22361,联合线程实际上就是 ... -
Java 多线程例子2 前台线程(用户线程) 后台线程(守护线程 ) setDaemon
2010-07-16 15:16 28461,setDaemon(true)后就是后台线程(守护线程 ) ...
相关推荐
主要介绍了java多线程之CyclicBarrier的使用方法的相关资料,希望通过本文能帮助到大家,让大家理解掌握这部分内容,需要的朋友可以参考下
CyclicBarrier实现多个线程相互等待的案例(实现累加操作)
近研究了一个别人的源码,其中用到多个线程并行操作一个文件,并且在所有线程全部结束后才进行主线程后面的处理。 其用到java.util.concurrent.CyclicBarrier 这个类。 CyclicBarrier是一个同步辅助类,它允许...
看完《think in java》多线程章节,自己写的多线程文档,还结合了其他的相关网络资料。 线程 一. 线程池 1)为什么要使用线程池 2 2)一个具有线程池的工作队列 3 3)使用线程池的风险: 4 4)有效使用线程池的原则 5...
CyclicBarrier是Java中的一个同步工具类,用于协调多个线程之间的同步。它的作用类似于CountDownLatch,可以让一个或多个线程等待其他线程执行完毕后再继续执行。 CyclicBarrier可以被看作是一个屏障,当所有线程都...
JUC(Java Util Concurrent)是Java中用于并发编程的工具包,提供了一组接口和类,用于处理多线程和并发操作。JUC提供了一些常用的并发编程模式和工具,如线程池、并发集合、原子操作等。 JUC的主要特点包括: ...
【2018最新最详细】并发多线程教程,课程结构如下 1.并发编程的优缺点 2.线程的状态转换以及基本操作 3.java内存模型以及happens-before规则 4.彻底理解synchronized 5.彻底理解volatile 6.你以为你真的了解final吗...
给大家分享了关于java多线程开发中通过对战游戏学习CyclicBarrier的相关知识点内容,有兴趣的朋友们学习参考下。
1)CountDownLatch(同步倒数计数器:等待多线程(或者多步骤)完成) 2)CyclicBarrier(循环屏障:同步屏障) 3)Semaphore(信号量:控制并发进程数) 主要参考资料:java并发编程的艺术、Java并发——...
主要介绍了Java多线程下的其他组件之CyclicBarrier、Callable、Future和FutureTask详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
多线程控制的三大安全类:CountDownLatch、CyclicBarrier、Semaphore,这工具包将其封装,可以让初学者更容易学习以及让开发者更容易调用,不需要自己重新编写核心代码。具体事例在源码中。
主要介绍了JAVA 多线程之信号量(Semaphore)实例详解的相关资料,需要的朋友可以参考下
目录线程安全 Thread Safety重入锁 ReentrantLock读写锁 ReadWriteLock倒计数器 CountDownLatch循环栅栏 CyclicBarrier信号量 Semaphore 线程安全 Thread Safety JMM JMM(Java Memory Model)是一种基于计算机内存...
由浅入深,通过图解和手写代码,讲解Java版的多线程,主要讲解如下内容: CPU运转机制 线程运行原理及线程状态 AQS原理&源码解读 线程同步+各种锁的原理&手写实现 JDK多线程工具包中,若干种工具的原理和手写实现: ...
CountDownLatch 和 CyclicBarrier 为线程同步的辅助工具,通过它可以做到使一条线程一直阻塞等待,直到其他线程完成其所处理的任务。
在JDK的并发包里提供了几个非常有用的并发容器和并发工具类,供我们在多线程开发中进行使用。 并发包的来历: 在实际开发中如果不需要考虑线程安全问题,大家不需要做线程安全,因为如果做了反而性能不好! 但是开发...
CountDownLatch可以实现一个线程等待多个线程、多个线程等待一个线程、多个线程等待多个线程(这里不涉及)。 我们首先来看看怎么实现一个线程等待多个线程吧。 工厂中,对产品需要进行质检,5个工人进行检查,所有...
【多线程】CyclicBarrier 和 CountDownLatch的不同 88 CountDownLatch 88 CyclicBarrier 89 区别: 89 【多线程】简述synchronized 和java.util.concurrent.locks.Lock的异同? 90 【线程】ThreadLocal的作用 90 ...
多线程锁 并发下的集合类 List Set Map Callable接口 线程创建的方式 callable / runnable FutureTask JUC常用辅助类 CountDownLatch (减少计数器) CyclicBarrier(加法计数器) Semaphore(信号量,流量控制) ...
1)多线程(ThreadLocal(问了父子线程怎么共享数据 interitableThreadLocals)、lock和sync区别(问HashMap1.7、1.8区别时带出)、 AQS原理(执行过程源码,入队出队的细节,源码细节)、CountDownLatch和 ...