`
lg_asus
  • 浏览: 190941 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

java中CyclicBarrier和CountDownLatch的异同

 
阅读更多
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中的同步和异步的异同共4页.pdf.zip

    另外,Java的并发包(java.util.concurrent)提供了丰富的方法和工具,如Semaphore(信号量)、CyclicBarrier(循环屏障)和CountDownLatch(倒计时器)等,帮助开发者更高效地管理同步问题。 在实际应用中,开发者...

    史上最全 Java 多线程面试题及答案

    本文将深入探讨Java多线程的相关知识点,包括它的用途、创建线程的方式、start()与run()的区别、Runnable和Callable接口的差异,以及CyclicBarrier和CountDownLatch的异同。 1. **多线程的用途** - **发挥多核CPU...

    java复试题目(面试)

    Java复试题目是面试者在求职过程中常常遇到的挑战,涵盖了广泛的知识点,旨在检验候选人的技术深度和广度。为了帮助大家更好地准备Java面试,以下是一些常见的Java复试题目及详解,涵盖核心概念、语法、多线程、集合...

    java面试基本知识

    并发工具类(Semaphore, CyclicBarrier, CountDownLatch等)的使用;理解并发容器如ConcurrentHashMap的工作原理。 6. **设计模式**:熟悉并能应用常见的23种设计模式,如单例、工厂、观察者、装饰器、代理、适配器...

    java多线程编程实例_Source

    Java并发包提供了如CountDownLatch、CyclicBarrier、Semaphore等并发工具类,用于协调多个线程间的协作。这些工具在分布式计算、并行任务调度等领域有广泛应用。 通过这些实例,学习者能够深入理解Java多线程编程,...

    2018JAVA经典就业面试大纲

    3. 并发工具:熟悉并发容器如ConcurrentHashMap、BlockingQueue,以及CountDownLatch、CyclicBarrier、Semaphore等并发工具。 四、Java IO/NIO 1. Java IO:掌握IO流的基本使用,了解流的分类和转换,以及缓冲区的...

    美团Java 岗 154+道面试题

    - **并发工具类**:了解Semaphore、CyclicBarrier、CountDownLatch等并发工具的使用。 7. **设计模式** - **单例模式**:熟悉各种单例实现方式及其优缺点。 - **工厂模式**:了解简单工厂、工厂方法、抽象工厂...

    java面试题大全-葵花宝典

    3. **并发工具类**:如Semaphore、CountDownLatch、CyclicBarrier等的使用方法。 此外,**IO与NIO**也是考察点: 1. **传统IO**:流的分类(字节流、字符流),缓冲区的使用,以及流的关闭操作。 2. **NIO**:非...

    计算机后端-Java-Java高并发从入门到面试教程-发课程资料.zip

    - **Java线程**:学习如何在Java中创建、启动、停止线程,理解Thread类和Runnable接口。 - **线程同步**:掌握synchronized关键字的用法,包括锁对象、同步代码块和同步方法。 2. **并发控制** - **wait/notify...

    jvaa面试宝典

    - 并发工具类:Semaphore、CyclicBarrier、CountDownLatch、ExecutorCompletionService等。 - Future和Callable接口:理解异步计算,以及如何获取结果。 通过深入学习这些知识点,Java开发者可以更好地准备面试,...

    2020JAVA面试题

    - Java并发工具类:如CountDownLatch、CyclicBarrier、Semaphore等的使用。 6. **IO流与NIO**: - 字节流与字符流:对比两者的区别,了解InputStream、OutputStream、Reader、Writer的层次结构。 - 文件操作:...

    java笔试和面试题

    - **并发工具类**:如Semaphore、CountDownLatch、CyclicBarrier等在多线程协作中的应用。 5. **IO流**: - **字节流与字符流**:了解FileInputStream, FileOutputStream, FileReader, FileWriter等基本流的使用...

    java面试题.zip

    - 理解并发工具类,如CountDownLatch、CyclicBarrier和Semaphore。 6. **JVM** - 理解JVM的结构,包括堆、栈、方法区、本地方法栈和程序计数器。 - 掌握垃圾收集机制,如GC(Garbage Collection)的工作原理。 ...

    java开发面试合集-自己整理

    - 接口与抽象类:比较接口和抽象类的异同,理解它们在设计中的应用场景。 2. **Java进阶** - 泛型:学习泛型的概念,理解其在代码复用和类型安全上的作用。 - 集合框架:深入研究ArrayList、LinkedList、HashSet...

    java面试精选必备题集

    * CountDownLatch、CyclicBarrier原理和区别 + CountDownLatch:计数DownLatch + CyclicBarrier:循环障碍器 * Semaphore原理 + 控制并发数量 * Exchanger原理 + 数据交换器 * ThreadLocal原理分析 + 线程局部...

    java面试经典题目

    9. **并发编程**:ExecutorService、Future、Callable接口的理解,以及并发工具类如Semaphore、CountDownLatch、CyclicBarrier的应用。 10. **设计模式**:常见的23种设计模式,如工厂模式、单例模式、建造者模式、...

    Java、面试题库,所有的题都在啊

    - **并发工具类**:如Semaphore, CyclicBarrier, CountDownLatch, Exchanger等的应用。 - **并发集合**:ConcurrentHashMap, CopyOnWriteArrayList, BlockingQueue等的使用。 4. **集合框架**: - **List, Set, ...

    2011各类型面试题汇

    - 并发工具类:Semaphore、CyclicBarrier、CountDownLatch等。 8. **设计模式:** - 单例模式、工厂模式、装饰器模式、代理模式等常见设计模式的应用与理解。 - 工厂方法和抽象工厂模式的区别。 9. **IO流:** ...

    基础知识.pdf

    深入分析了线程同步工具类的原理,如CountDownLatch、CyclicBarrier、Semaphore和Exchanger。详细探讨了线程池的实现原理、线程生命周期、锁机制以及线程安全问题,包括volatile关键字的实现原理,悲观锁和乐观锁的...

Global site tag (gtag.js) - Google Analytics