1. CyclicBarrier : 初始化count是固定的, 通常用于多个线程同时等待彼此,当所有线程到达某一点时,同时继续进行。
例子:
Int N = 3; final CyclicBarrier cb = new CyclicBarrier(N); for (int i = 0; i < N; i++) { new Thread(new Runnable() { public void run() { Do xxx; cb.await(); //等3个进程同时到达时,才会继续。 }).start(); }
2. CountdownLatch: 一次性的,初始化count是固定的,通常用于主线程等待一堆子线程的完成。
例子:
final CountDownLatch cdl = new CountDownLatch(N); new Thread(new Runnable() { public void run() { cdl.await(); } }).start(); for (int i = 0; i < N; i++) { final int idx = i; new Thread(new Runnable() { public void run() { cdl.countDown(); } }).start(); }
3. Semaphor:就像是一个计数器,调用Release()时增加,调用acquire时减少,如果acquire的数量不足,则等待。
例子:
public class SemaphoreTest { private static final int MAX_THREADS = 5; public static void main(String[] args) throws Exception { Semaphore semaphore = new Semaphore(0); int threadCount = 0; Random random = new Random(); for(int i=0;i<MAX_THREADS;i++) { Thread t = new Thread(new WorkerThread(semaphore, String.format("Thread-%d", i))); t.start(); threadCount++; } semaphore.acquire(threadCount); //获取不到则等待,直到所有任务完成。 } private static class WorkerThread implements Runnable { private Semaphore semaphore; private String name; public WorkerThread(Semaphore semaphore, String name) { this.name = name; this.semaphore = semaphore; } public void run() { semaphore.release(); //增加记数 } } }
4. Phaser:JDK7中新加入的同步对象,比较强大。
可以实现CountdowLatch 和 CyclicBarrier的功能,但是count可以不是固定的。
还可以实现一批进程,按照一个阶段一个阶段的执行,每个阶段都等待其他进程结束后才继续进行。
详细参考这个帖子。
http://niklasschlimm.blogspot.com/2011/12/java-7-understanding-phaser.html
相关推荐
java 高并发应用场景
Java并发编程一CountDownLatch、CyclicBarrier、Semaphore初使用 CountDownLatch、CyclicBarrier、Semaphore这些线程协作工具类是基于AQS的,看完这篇博客后可以去看下面这篇博客,了解它们是如何实现的。 Java并发...
主要介绍了Java并发编程:CountDownLatch与CyclicBarrier和Semaphore的实例详解的相关资料,需要的朋友可以参考下
7、并发工具类CountDownLatch 、CyclicBarrier和Semaphore底层实现原理 8、线程池原理和如何使用线程池 9、ThreadLocal 为什么会内存泄漏 10、Volatile底层实现原理 11、AQS源码分析 12、CAS原理分析和使用场景 13、...
java并发,主要用于初学者学习,主要案列,Thread.join,ThreadLocal,Lock接口,LockSupport,Condition接口,ConcurrentHashMap的实现原理与...Fork/Join 框架,CountDownLatch,CyclicBarrier,Semaphore,Exchanger
多线程控制的三大安全类:CountDownLatch、CyclicBarrier、Semaphore,这工具包将其封装,可以让初学者更容易学习以及让开发者更容易调用,不需要自己重新编写核心代码。具体事例在源码中。
java并发之并发工具类,并发工具类有很多,这里主要介绍了CyclicBarrier、CountDownLatch、Semaphore、Exchanger
Java并发编程基础主要包括以下几个核心方面: ...并发工具类:掌握Java并发包java.util.concurrent中提供的各种工具类,如CountDownLatch、CyclicBarrier、Semaphore等,它们简化了并发编程的复杂性。
CountDownLatch/CyclicBarrier/Semaphore CountDownLatch 枚举类的使用 CyclicBarrier Semaphore 阻塞队列 SynchronousQueue Callable接口 阻塞队列的应用——生产者消费者 传统模式 阻塞队列模式 阻塞队列的应用...
有以下类的实例: ThreadPool ScheduledThread CyclicBarrier BlockingQueue CountDownLatch FutureTask CompletionService Semaphore
CountDownLatch是在java1.5被引入的,跟它一起被引入的并发工具类还有CyclicBarrier、Semaphore、ConcurrentHashMap和BlockingQueue,它们都存在于java.util.concurrent包下。CountDownLatch这个类能够使一个线程...
AQS相关应用(CountDownLatch、CyclicBarrier、Semaphore等),executor(ThreadPoolExecutor、ScheduledThreadPoolExecutor、FutureTask等),collection(ConcurrentHashMap、CopyOnWriteArrayList等), ...
java并发包讲解 可以找我要代码,qq 3341386488 ## 线程安全-并发容器JUC--原理以及分析 ... countDownLatch CyclicBarrier Semaphore Exchanger ReenTrantLock ReentrantReadWriteLock 等等
CountDownLatch,CyclicBarrier,Semaphore源码解析.mp4 提前完成任务之FutureTask使用.mp4 Future设计模式实现(实现类似于JDK提供的Future).mp4 Future源码解读.mp4 ForkJoin框架详解.mp4 同步容器与并发容器.mp4 ...
Java 5.0里新加了4个协调线程间进程的同步装置,它们分别是Semaphore, CountDownLatch, CyclicBarrier和Exchanger,本例主要介绍Semaphore,Semaphore是用来管理一个资源池的工具,可以看成是个通行证
1、本资源包含并发编程基础知识的使用案例,包括:线程创建、Synchronized和Reentrantlock锁的使用、线程安全问题演示、Condition的应用、CountDownLatch的应用、Cyclicbarrier的应用、Semaphore的应用、线程池的...
java forkjoin 源码 JDK源码学习: Java 容器 ArrayList LinkedList PriorityQueue ...CountDownLatch CyclicBarrier Semaphore ForkJoin FutureTask BlockingQueue Spring AOP IOC 面向面经复习
leetcode下载 newbie-notes 创建该项目是为了记录自己的一些笔记 ...CountDownLatch CyclicBarrier Semaphore Atomic 原子类型 Executor 线程池 ThreadLocal 用法 一些优秀的仓库 spring framework