- 浏览: 525316 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (161)
- 多线程与并发编程 (20)
- 算法和数据结构 (8)
- 缓存 (0)
- HttpClient (2)
- 疑难杂症 (11)
- Java内存管理 (17)
- 分布式开发 (14)
- Linux常用命令 (10)
- OSGI (0)
- UML (2)
- 趣味面试题 (5)
- 设计模式 (8)
- Java类加载 (2)
- JSTL (1)
- Web 服务器 (4)
- IT人生 (3)
- Java基础 (11)
- Flash技术 (7)
- 新知识 (3)
- 常用速备速查 (4)
- 版本控制 (1)
- Java集合工具类 (6)
- web前端技术 (1)
- 趣味话题 (1)
- 安全 (0)
- 架构设计 (5)
- Spring (4)
- 负载均衡技术 (2)
- 持久层技术 (2)
- MySQL单机多实例方案 (1)
- 收藏备用 (0)
- 性能优化 (3)
最新评论
-
liuwuhen:
...
Pushlet的工作原理 -
fbwfbi:
fengchuizhuming 写道楼主的完全正确。鉴定完毕楼 ...
硬件同步原语(CAS)理论 -
passerby_whu:
uule 写道这个测试后结果为:“testPageConten ...
FutureTask的使用方法和使用实例 -
fengchuizhuming:
楼主的完全正确。鉴定完毕
硬件同步原语(CAS)理论 -
edwardjuice:
FutureTask的使用方法和使用实例
CyclicBarrier允许给定数量的线程全部到达关卡点时,关卡就被成功突破,关卡被重置以备下一次使用。跟CountDownlatch特别类似,但是CountDownLatch不同的是不能被重新重置再使用。
前面的blog说到用countdownlatch去完成方法里面的3个service的调用。用cyclicBarrier同样可以实现。
package cyclicbarrier;
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
/**
*
*<p>Test</p>
*<p>Description:</P>
*<p>Company:</p>
*<p>Department:CAS</p>
*@Author: Tommy Zhou
*@Since: 1.0
*@Version:Date:2011-4-26
*
**/
public class CyclicBarrierSample {
public static void main(String[] args) {
String[] strs = getResult();
for (int i = 0; i < strs.length; i++) {
System.out.println(strs[i]);
}
}
public static String[] getResult(){
String[] strs = new String[3];
CyclicBarrier cyclicBarrier = new CyclicBarrier(4);
Work1 work1 = new Work1(cyclicBarrier,strs[0]);
Work2 work2 = new Work2(cyclicBarrier,strs[1]);
Work3 work3 = new Work3(cyclicBarrier,strs[2]);
work1.start();
work2.start();
work3.start();
try {
cyclicBarrier.await();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (BrokenBarrierException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
strs[0] = work1.str1;
strs[1] = work2.str2;
strs[2] = work3.str3;
return strs;
}
}
class Work1 extends Thread{
public String str1;
public CyclicBarrier cyclicBarrier1;
public Work1(CyclicBarrier cyclicBarrier1,String str1){
this.cyclicBarrier1 = cyclicBarrier1;
this.str1 = str1;
}
public void run(){
str1="work1";
try {
cyclicBarrier1.await();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (BrokenBarrierException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class Work2 extends Thread{
public String str2;
public CyclicBarrier cyclicBarrier2;
public Work2(CyclicBarrier cyclicBarrier2,String str2){
this.cyclicBarrier2 = cyclicBarrier2;
this.str2 = str2;
}
public void run(){
try {
Thread.sleep(3000);
str2="work2";
cyclicBarrier2.await();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (BrokenBarrierException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class Work3 extends Thread{
public String str3;
public CyclicBarrier cyclicBarrier3;
public Work3(CyclicBarrier cyclicBarrier3,String str3){
this.cyclicBarrier3 = cyclicBarrier3;
this.str3 = str3;
}
public void run(){
try {
Thread.sleep(3000);
str3="work3";
cyclicBarrier3.await();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (BrokenBarrierException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
发表评论
-
死锁实例
2011-05-19 14:21 1938下面这道题,是考死锁的,比较简单,想两个问题: 1.什么时候 ... -
Java存储模型
2011-05-18 13:29 01.什么是存储模型 没有适当的同步,编译器生成指令的次序,可 ... -
设计模式-组合模式
2011-05-16 15:48 1098组合模式的定义: 将对象组合成树的形式来表示整体和局部之 ... -
CompleteService介绍和使用实例
2011-05-11 17:31 3976当向Executor提交批处理任务时,并且希望在它们完成后获得 ... -
CopyOnWriteArrayList工作原理和实例
2011-05-05 23:43 3380CopyOnWriteArrayList顾名思义,在写入操作时 ... -
Semaphore的介绍和使用实例
2011-04-27 22:32 2807Semaphore可以用来控制能 ... -
FutureTask的使用方法和使用实例
2011-04-27 15:34 13310FutureTask是一种可以取消的异步的计算任务。它的计算是 ... -
CountDownLatch的使用实例
2011-04-26 22:20 8212CountDownLatch CountDownl ... -
Java 并发编程基础-共享对象
2011-04-19 14:48 1444Java 并发编程基础 ... -
从JVM并发看CPU内存指令重排序(Memory Reordering)
2011-04-18 16:17 1479我们都知道,现在的计算机, cpu 在计算的时候 ... -
Java并发编程基础
2011-04-15 14:55 1544Java 并发编程基 ... -
Java多线程基础
2011-04-13 15:52 4733Java 多线程基础 ... 2 ... -
硬件同步原语(CAS)理论
2010-09-24 22:13 6982在Java并发编程中,常常 ... -
java5中使用interrupt()来停止java线程的方法(转)
2010-08-18 23:24 3109在开发java多线程时,如果要停止线程这个问题很头痛吧,不过在 ... -
Java 中的Double Check Lock(转)
2010-07-27 21:13 8090对于多线程编程来说,同步问题是我们需要考虑的最多的问题,同步的 ... -
并发访问的问题解决方案
2010-07-26 18:15 1994目前正在做基于Red 5 的Meeting系统,我们会在Mee ... -
用并发包中的重入锁实现生产消费模型
2010-06-15 00:07 1429传统的生产消费模型,实际上是通过一个条件来调节生产者和消费者线 ... -
ThreadLocal原理(转)
2010-03-24 18:06 2161http://jzhua.iteye.com/blog/517 ... -
(转)Java偏向锁实现原理(Biased Locking)
2010-03-21 22:24 1361http://www.iteye.com/topic/5180 ... -
生产消费模型实例
2010-03-02 23:23 1709“生产者-消费者-仓储”模型,包含三种角色: 1.生产者 ...
相关推荐
- 使用CyclicBarrier实现多线程分治策略,每个子任务完成后来一次全局计算的例子。 - 线程间的异常处理,包括中断和超时的处理。 - 结合Future和ExecutorService,进一步提高并发性能和灵活性。 - 在大型项目中的...
Java并发编程(CyclicBarrier)实例详解 Java并发编程(CyclicBarrier)实例详解主要介绍了Java并发编程(CyclicBarrier)实例详解的相关资料,JAVA编写并发程序的时候,我们需要仔细去思考一下并发流程的控制,...
Java并发实例之CyclicBarrier的使用 CyclicBarrier是Java中的一种多线程并发控制实用工具,和CountDownLatch非常类似,它也可以实现线程间的计数等待,但是它的功能比CountDownLatch更加复杂且强大。CyclicBarrier...
2. **CyclicBarrier的使用**: - **构造器**:创建CyclicBarrier时需要指定线程数量n和可选的屏障动作。屏障动作会在所有线程都到达屏障点后执行。 - **await方法**:每个线程在到达屏障点时调用await方法,这会...
Java多线程之CyclicBarrier的使用方法 Java多线程之CyclicBarrier的使用方法是Java多线程编程中的一种同步机制,用于实现多个线程之间的同步协作。CyclicBarrier是Java 5中引入的一种同步机制,用于让多个线程等待...
1. **重复使用性**:与CountDownLatch不同,CyclicBarrier可以在所有线程都达到屏障点后重置,允许再次使用。这意味着一旦所有线程都完成各自的任务并调用await()方法,屏障将被重置,计数器恢复到初始值,可以进行...
`CyclicBarrier`的名字来源于它的可重用性,一旦一组线程通过了屏障,它可以重置并再次使用,而不是像`CountDownLatch`那样只能使用一次。 在上述的测试代码中,我们创建了一个`CyclicBarrier`实例,设置了线程数为...
要使用`CyclicBarrier`,首先需要创建一个实例对象。在构造函数中,我们需要指定参与线程的数量以及当所有线程都到达屏障点时所要执行的操作(如果有的话)。这是一个典型的使用示例: ```java import java.util....
10. **并发工具**:如CountDownLatch、CyclicBarrier、Semaphore等,这些工具可以帮助构建复杂的并发程序,实例可能展示如何有效使用它们。 11. **Java 8及以后的新特性**:如Lambda表达式、Stream API、Optional类...
15. **并发编程**:Java提供了丰富的并发工具类,如CountDownLatch、CyclicBarrier、Semaphore等,实例将展示如何高效地管理并发任务。 通过逐一研究这些源码实例,不仅可以加深对Java语言的理解,还能提升实际编程...
1. **初始化:** 使用给定的计数值创建一个 CountDownLatch 实例。 2. **递减计数器:** 在需要完成的工作完成后,调用 `countDown()` 方法来递减计数器。 3. **等待:** 其他线程调用 `await()` 方法来等待计数器的...
10. **并发工具类**:如Semaphore(信号量)、CountDownLatch(倒计时锁)、CyclicBarrier(回环栅栏)等,用于控制并发访问和同步。 通过这100个实例,初学者不仅能掌握Java高级特性,还能提升问题解决能力和实际...
Java并发编程:CountDownLatch与CyclicBarrier和Semaphore的实例详解 Java并发编程是Java语言中的一种高级技术,用于处理多线程编程中的同步问题。Java 1.5中引入了几个高效的辅助类,包括CountDownLatch、...
实例中可能涵盖了这两种方式的使用,并通过不同示例解释它们的异同和适用场景。 二、线程控制 1. 同步机制:包括synchronized关键字和Lock接口(如ReentrantLock可重入锁)。synchronized用于解决共享资源的并发...
13. **多线程**:了解如何使用线程池、线程同步机制(如synchronized关键字、CountDownLatch、CyclicBarrier)对提高应用性能至关重要。 14. **依赖注入**:如使用Dagger 2或Koin进行依赖注入,可简化代码结构,...
15. **并发工具**:如Semaphore、CyclicBarrier、ExecutorService等,这些工具在多线程编程中非常有用,实例可能有它们的应用。 通过研究这些" SUN公司的java实例手册 ",无论是初学者还是经验丰富的开发者,都能...
在"JAVA100例之实例64 JAVA线程间通讯"这个主题中,我们将深入探讨Java中实现线程间通信的几种主要方法。 1. **共享数据**:最直观的线程间通信方式是通过共享内存空间,即共享变量。只要对共享变量的操作是线程...
当你有一个实现了`Runnable`接口的类时,你可以创建一个`Thread`对象并传入你的`Runnable`实例,如: ```java Runnable task = new MyRunnable(); Thread thread = new Thread(task); thread.start(); ``` 这里,`...
Java中将异步调用转换为同步调用有多种方法,本文将详细介绍五种方法:使用wait和notify方法、使用条件锁、使用Future、使用CountDownLatch、使用CyclicBarrier。 1. 使用wait和notify方法 wait和notify方法是...
Java提供了丰富的并发工具,如Semaphore、CountDownLatch和CyclicBarrier,学习者需了解其用法和适用场景。 除此之外,Java集合框架是存储和操作数据的重要工具,包括List、Set、Map等接口及其实现类。学习者应熟悉...