`

CountDownLatch用法小结

 
阅读更多

       最近在看ZK的源码,看到了有用到java.util.concurrent.CountDownLatch 这个类。总结一下用法:

    CountDownLatch,一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。
主要方法
    public CountDownLatch(int count);
    public void countDown();
    public void await() throws InterruptedException
 
   构造方法参数指定了计数的次数
   countDown方法,当前线程调用此方法,则计数减1
   awaint方法,调用此方法会一直阻塞当前线程,直到计时器的值为0

 下面通过一个例子展示,程序会一直等待countDownLatch的值变成0,才会打印出:“工人们做完了。”。

package com.get.set;

import java.util.concurrent.CountDownLatch;

public class CountDownLatchDemo{
	
	public static void main(String args[]){
		CountDownLatch countDownLatch=new CountDownLatch(2);
		Worker workA=new Worker("wjy", countDownLatch);
		Worker workB=new Worker("yuanyuan", countDownLatch);
		
		workA.start();
		workB.start();
		
		try {
			countDownLatch.await();
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		System.out.println("工人们做完了。");
	}
	
	static class Worker extends Thread{
		private String name;
		private CountDownLatch countDownLatch;
		public Worker(String name,CountDownLatch countDownLatch){
			this.name=name;
			this.countDownLatch=countDownLatch;
		}
		@Override
		public void run(){
			System.out.println("Hello, I am "+name);
			this.countDownLatch.countDown();
		}
	}
}
//运行结果:
Hello, I am wjy
Hello, I am yuanyuan
工人们做完了。

    注意:如果我们把CountDownLatch的初始值设为3,那么在上面这个程序中永远都不会打印出“工人们做完了。

   因为,程序会一直等待countDownLatch的值变成0.但是countDownLatch的值永远不可能变成0了。

分享到:
评论

相关推荐

    Java CountDownLatch完成异步回调实例详解

    小结 本文讲述了如何使用 CountDownLatch 来实现异步回调,并探讨了相关的知识点。 CountDownLatch 是一个非常有用的工具,能够帮助我们在多线程环境中实现异步回调。然而,在使用 CountDownLatch 时,需要注意一些...

    CountDownLatch源码解析之countDown()

    6. 小结 本文详细解析了CountDownLatch源码中的countDown()方法,揭示了其内部实现机制。通过对tryReleaseShared()方法和doReleaseShared()方法的实现原理的分析,我们可以更好地理解CountDownLatch的工作机制,并...

    Java多线程小结

    ### Java多线程小结 #### 一、多线程的概念与意义 多线程是Java编程中的一个重要概念,指的是程序在运行时可以同时执行多个线程的能力。它能够提高程序的性能,尤其是在多核处理器的环境下。多线程使得程序能够更...

    Java线程类小结(附思维导图)

    - **CountDownLatch、CyclicBarrier、Semaphore**:同步工具类,用于协调多线程间的协作。 通过深入学习这些知识点,并结合思维导图,可以帮助开发者更好地理解和管理Java线程,提高程序的并发性能和稳定性。在...

    分享40个Java多线程问题小结

    `Runnable`接口和`Callable`接口的区别在于`Runnable.run()`方法没有返回值,仅用于执行指定任务,而`Callable.call()`方法有返回值,适合于异步计算并获取结果。与`Future`和`FutureTask`结合使用,可以监控线程...

    Java项目开发PPT

    【Java项目开发PPT】是针对Java编程语言的实践应用教学资源,主要目的是在30天...此外,PPT中的每一页都可能包含小结和习题,以巩固学习效果。通过这样的学习计划,学习者可以在短时间内建立起坚实的Java项目开发基础。

    心得.rar心得.rar

    1. **Java线程小结**:这部分内容可能涉及多线程编程的基础知识,如线程的创建、同步机制(synchronized、Lock等)、并发工具类(Semaphore、CountDownLatch、CyclicBarrier等),以及线程安全问题和解决方案。...

    Java编程中多线程总结

    #### 九、小结 Java多线程是一个庞大且复杂的主题,涉及线程的创建、调度、同步等多个方面。通过深入理解上述知识点,开发者能够更好地利用Java的多线程特性来构建高性能、高并发的应用程序。此外,Java 5及其后续...

Global site tag (gtag.js) - Google Analytics