如果说CountDownLatch(闭锁)是一次性的,那么CyclicBarrier正好可以循环使用。它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。所谓屏障点就是一组任务执行完毕的时刻。
比如在性能测试的时候,多线程需要把数据源的连接准备好,然后执行数据库相关操作。那么“准备”这个任务就可以使用闭锁。
关键方法
CyclicBarrier barrier = new CyclicBarrier(令牌数量);
barrier.await();//屏障点,消耗一个令牌,当令牌消耗到任务数量的时候,栅栏就会全部放开
barrier.reset();//重置,可以复用栅栏,不用重新创建栅栏对象
参考代码
//所有代码到barrier.await()时,栅栏开放,代码开始执行
CompletionService<String> completionService = new ExecutorCompletionService<String>(executor);
final int threadCount = 32;
final CyclicBarrier barrier = new CyclicBarrier(threadCount + 1);
for (int i = 0; i < threadCount; i++) {
completionService.submit(new Callable<String>() {
@Override
public String call() throws Exception {
//条件准备
barrier.await();
//自定义任务
return null;
}
});
}
barrier.await();
参考文章
http://www.blogjava.net/xylz/archive/2010/07/12/325913.html
http://www.cnblogs.com/liuling/archive/2013/08/21/2013-8-21-01.html
分享到:
相关推荐
其中包括`Semaphore`(信号量)用于限制同时访问特定资源的线程数量,`CountDownLatch`(倒计时器)用于一次性阻塞多个线程,直到某个事件发生,以及`CyclicBarrier`(循环栅栏)让一组线程等待其他线程到达特定点后...
- `java.util.concurrent`包提供了一系列的并发工具类,如`Semaphore`(信号量)、`CountDownLatch`(计数器)、`CyclicBarrier`(回环栅栏)等,它们为复杂的并发场景提供了强大的支持。 - **并发集合** 如`...
2. CyclicBarrier:循环栅栏,允许一组线程等待彼此到达某个点后再一起继续执行。 3. Semaphore:信号量,用于控制对有限资源的访问权限,常用于限流和同步。 六、线程安全与内存模型 1. Java内存模型(JMM):定义...
Java并发工具类扩展了基本的并发功能,例如CountDownLatch、CyclicBarrier、Semaphore和Phaser提供了不同场景下的同步支持。Exchanger用于两个线程之间交换数据。 12. 硬件和操作系统支持 Java并发编程的成功在很大...
13. 栅栏 CyclicBarrier 14. 交换机 Exchanger 15. 信号量 Semaphore 16. 执行器服务 ExecutorService 17. 线程池执行者 ThreadPoolExecutor 18. 定时执行者服务 ScheduledExecutorService 19. 使用 ForkJoinPool ...
Java并发编程中的栅栏(CyclicBarrier)是一个同步辅助类,它允许一组线程等待彼此到达某个特定点,然后一起继续执行。这个特定点被称为屏障点。与闭锁(CountDownLatch)不同,闭锁通常是一次性的,而CyclicBarrier...
最后,Java并发工具类,如Semaphore(信号量)、CyclicBarrier(回环栅栏)、CountDownLatch(计数器门闩)和Exchanger(交换器),提供了更高级的同步和协调机制,有助于解决复杂并发场景的问题。 通过阅读《JAVA...
3. **并发工具类**:如Semaphore(信号量)、CountDownLatch(计数器)、CyclicBarrier(回环栅栏)和Exchanger(交换器)等,这些都是Java并发库提供的重要工具,用于实现复杂的同步和协作机制。 4. **并发集合**...
3. **并发工具类**:介绍Java并发包(java.util.concurrent)中的各种工具类,如Semaphore信号量、CountDownLatch倒计时器、CyclicBarrier回环栅栏、ThreadPoolExecutor线程池等,以及如何在实际编程中合理使用它们...
1. java.util.concurrent - Java 并发工具包 2. 阻塞队列 BlockingQueue 3. 数组阻塞队列 ArrayBlockingQueue 4. 延迟队列 DelayQueue 5. 链阻塞队列 LinkedBlockingQueue 6. 具有优先级的阻塞队列 ...
此外,VisualVM和JProfiler等第三方工具也是Java并发调试的好助手。 8. **Jetty服务器**:Jetty是一款轻量级的Java Web服务器和Servlet容器,支持HTTP、HTTPS等多种协议,并且具有优秀的并发性能和低内存消耗,常...
此外,`java.util.concurrent`包还包含许多其他并发工具类,如Semaphore(信号量)用于控制同时访问特定资源的线程数量,CountDownLatch(倒计时栅栏)用于同步多个线程,CyclicBarrier(循环栅栏)用于让一组线程...
Java并发工具类库(java.util.concurrent)是并发编程中的另一个重要主题,包括Atomic类(提供原子操作)、Semaphore(信号量)、CountDownLatch(计数器门锁)、CyclicBarrier(循环栅栏)和Exchanger(交换器)等...
3. **同步工具类**:Java并发包`java.util.concurrent`中的工具类,如`Semaphore`(信号量)、`CyclicBarrier`(回环栅栏)、`CountDownLatch`(倒计时器)和`FutureTask`(未来任务)等,提供了更灵活的线程同步和...
8. **原子性、可见性和有序性**: 这是Java并发编程的三大特性,对应于`synchronized`、`volatile`以及JVM内存模型保证的顺序性。 9. **并发编程最佳实践**: 如避免长时间阻塞操作,正确使用同步,减少共享状态,...
栅栏 CyclicBarrier 14. 交换机 Exchanger 15. 信号量 Semaphore 16. 执行器服务 ExecutorService 17. 线程池执行者 ThreadPoolExecutor 18. 定时执行者服务 ScheduledExecutorService 19. 使用 ForkJoinPool 进行...
《JAVA并发编程实践》是一本深入探讨Java并发编程技术的权威指南,涵盖了从基础理论到实战技巧的全方位内容。本书由多位资深Java并发编程专家共同编写,旨在帮助开发者理解和掌握Java并发编程的核心概念与最佳实践。...
- **java.util.concurrent** 包:学习并发工具类,如Semaphore(信号量)、CountDownLatch(计数器)、CyclicBarrier(回环栅栏)、Exchanger(交换器)等,它们提供了高级并发控制手段。 3. **并发容器** - **...
Java并发系列之CyclicBarrier源码分析 CyclicBarrier是Java并发系列中的一种同步工具类,用于实现一组线程相互等待。当所有线程都到达某个屏障点后,再进行后续的操作。下面是对CyclicBarrier源码的详细分析。 ...