CountDownLatch只能使用一次,cyclicBarrier可以重复使用,同时还提供barrierAction。 在功能上,cyclicBarrier可以完全替代countdownlatch, 但是性能上,如果同时工作的线程在几百数量级,则两者性能差不多,但是在千/万数量级的线程时,countdownlatch性能远远高于cyclicbarrier。
下面是测试代码,改变count值,观察输出结果:
public class Test2
{
CyclicBarrier barrier;
CountDownLatch latch;
int count;
long beginTime;
public static void main(String... args)
{
final Test2 t = new Test2();
t.count = 5000;
t.beginTime = System.currentTimeMillis();
t.barrier = new CyclicBarrier(t.count, new Runnable() {
@Override
public void run()
{
System.out.println("cyclic barrier time consumed: " + (System.currentTimeMillis() - t.beginTime));
}
});
t.latch = new CountDownLatch(t.count);
// t.test();// tatal: 5177344, free: 3357624, used: 1819720 cyclic barrier time consumed: 766
// t.test2();// tatal: 5177344, free: 4454904, used: 722440 countdown latch time consumed: 516
// long total = Runtime.getRuntime().totalMemory();
// long free = Runtime.getRuntime().freeMemory();
// System.out.println("tatal: "+ total + ", free: "+ free +", used: "+ (total-free));
}
/**
* cyclic barrier
*/
private void test()
{
for (int i = 0; i < count; i++)
{
new TestThread().start();
}
}
/**
* countdown latch
*/
private void test2()
{
for (int i = 0; i < count; i++)
{
new TestThread2().start();
}
try
{
latch.await();
}
catch (InterruptedException e)
{
e.printStackTrace();
}
System.out.println("countdown latch time consumed: " + (System.currentTimeMillis() - beginTime));
}
class TestThread extends Thread
{
@Override
public void run()
{
try
{
Thread.sleep(100);
barrier.await();
}
catch (InterruptedException e)
{
e.printStackTrace();
}
catch (BrokenBarrierException e)
{
e.printStackTrace();
}
}
}
class TestThread2 extends Thread
{
@Override
public void run()
{
try
{
Thread.sleep(100);
latch.countDown();
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
}
分享到:
相关推荐
另外,Java的并发包(java.util.concurrent)提供了丰富的方法和工具,如Semaphore(信号量)、CyclicBarrier(循环屏障)和CountDownLatch(倒计时器)等,帮助开发者更高效地管理同步问题。 在实际应用中,开发者...
本文将深入探讨Java多线程的相关知识点,包括它的用途、创建线程的方式、start()与run()的区别、Runnable和Callable接口的差异,以及CyclicBarrier和CountDownLatch的异同。 1. **多线程的用途** - **发挥多核CPU...
Java复试题目是面试者在求职过程中常常遇到的挑战,涵盖了广泛的知识点,旨在检验候选人的技术深度和广度。为了帮助大家更好地准备Java面试,以下是一些常见的Java复试题目及详解,涵盖核心概念、语法、多线程、集合...
并发工具类(Semaphore, CyclicBarrier, CountDownLatch等)的使用;理解并发容器如ConcurrentHashMap的工作原理。 6. **设计模式**:熟悉并能应用常见的23种设计模式,如单例、工厂、观察者、装饰器、代理、适配器...
Java并发包提供了如CountDownLatch、CyclicBarrier、Semaphore等并发工具类,用于协调多个线程间的协作。这些工具在分布式计算、并行任务调度等领域有广泛应用。 通过这些实例,学习者能够深入理解Java多线程编程,...
3. 并发工具:熟悉并发容器如ConcurrentHashMap、BlockingQueue,以及CountDownLatch、CyclicBarrier、Semaphore等并发工具。 四、Java IO/NIO 1. Java IO:掌握IO流的基本使用,了解流的分类和转换,以及缓冲区的...
- **并发工具类**:了解Semaphore、CyclicBarrier、CountDownLatch等并发工具的使用。 7. **设计模式** - **单例模式**:熟悉各种单例实现方式及其优缺点。 - **工厂模式**:了解简单工厂、工厂方法、抽象工厂...
3. **并发工具类**:如Semaphore、CountDownLatch、CyclicBarrier等的使用方法。 此外,**IO与NIO**也是考察点: 1. **传统IO**:流的分类(字节流、字符流),缓冲区的使用,以及流的关闭操作。 2. **NIO**:非...
- **Java线程**:学习如何在Java中创建、启动、停止线程,理解Thread类和Runnable接口。 - **线程同步**:掌握synchronized关键字的用法,包括锁对象、同步代码块和同步方法。 2. **并发控制** - **wait/notify...
- 并发工具类:Semaphore、CyclicBarrier、CountDownLatch、ExecutorCompletionService等。 - Future和Callable接口:理解异步计算,以及如何获取结果。 通过深入学习这些知识点,Java开发者可以更好地准备面试,...
- Java并发工具类:如CountDownLatch、CyclicBarrier、Semaphore等的使用。 6. **IO流与NIO**: - 字节流与字符流:对比两者的区别,了解InputStream、OutputStream、Reader、Writer的层次结构。 - 文件操作:...
- **并发工具类**:如Semaphore、CountDownLatch、CyclicBarrier等在多线程协作中的应用。 5. **IO流**: - **字节流与字符流**:了解FileInputStream, FileOutputStream, FileReader, FileWriter等基本流的使用...
- 理解并发工具类,如CountDownLatch、CyclicBarrier和Semaphore。 6. **JVM** - 理解JVM的结构,包括堆、栈、方法区、本地方法栈和程序计数器。 - 掌握垃圾收集机制,如GC(Garbage Collection)的工作原理。 ...
- 接口与抽象类:比较接口和抽象类的异同,理解它们在设计中的应用场景。 2. **Java进阶** - 泛型:学习泛型的概念,理解其在代码复用和类型安全上的作用。 - 集合框架:深入研究ArrayList、LinkedList、HashSet...
* CountDownLatch、CyclicBarrier原理和区别 + CountDownLatch:计数DownLatch + CyclicBarrier:循环障碍器 * Semaphore原理 + 控制并发数量 * Exchanger原理 + 数据交换器 * ThreadLocal原理分析 + 线程局部...
9. **并发编程**:ExecutorService、Future、Callable接口的理解,以及并发工具类如Semaphore、CountDownLatch、CyclicBarrier的应用。 10. **设计模式**:常见的23种设计模式,如工厂模式、单例模式、建造者模式、...
- **并发工具类**:如Semaphore, CyclicBarrier, CountDownLatch, Exchanger等的应用。 - **并发集合**:ConcurrentHashMap, CopyOnWriteArrayList, BlockingQueue等的使用。 4. **集合框架**: - **List, Set, ...
- 并发工具类:Semaphore、CyclicBarrier、CountDownLatch等。 8. **设计模式:** - 单例模式、工厂模式、装饰器模式、代理模式等常见设计模式的应用与理解。 - 工厂方法和抽象工厂模式的区别。 9. **IO流:** ...
深入分析了线程同步工具类的原理,如CountDownLatch、CyclicBarrier、Semaphore和Exchanger。详细探讨了线程池的实现原理、线程生命周期、锁机制以及线程安全问题,包括volatile关键字的实现原理,悲观锁和乐观锁的...