线程同步辅助类CountDownLatch

标签: 线程 同步 countdownlatch | 发表时间:2016-02-01 16:26 | 作者:
出处:http://gao-xianglong.iteye.com

《线程同步辅助类CountDownLatch》

 

Java5提供了一个非常有用的线程同步辅助类型,java.util.concurrent.CountDownLatch。假设有多个线程正在执行异步操作,主线程希望这些异步线程全部完成之后再继续执行后续任务,那么使用CountDownLatch将非常方便。当这些异步任务并未全部执行完成之前,主线程会一直阻塞,直至所有的异步任务完成为止。

 

示例代码,如下所示:

public class ThreadTest {
	public static void main(String[] args) {
		final CountDownLatch countDownLatch = new CountDownLatch(2);
		System.out.println("befor count->" + countDownLatch.getCount());
		new Thread() {
			public void run() {
				System.out.println("线程A准备开始工作...");
				try {
					Thread.sleep(1000);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				System.out.println("线程A工作完成...");
				countDownLatch.countDown();
			}
		}.start();
		new Thread() {
			public void run() {
				System.out.println("线程B准备开始工作...");
				try {
					Thread.sleep(5000);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				System.out.println("线程B工作完成...");
				countDownLatch.countDown();
			}
		}.start();
		try {
			countDownLatch.await();
			System.out.println("after count->" + countDownLatch.getCount());
			System.out.println("所有线程全部工作完成...");
		} catch (InterruptedException e) {
			e.printStackTrace();
		}

	}
}

 



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [线程 同步 countdownlatch] 推荐:

线程同步辅助类CountDownLatch

- - gao_xianglong的自言自语
《线程同步辅助类CountDownLatch》. Java5提供了一个非常有用的线程同步辅助类型,java.util.concurrent.CountDownLatch. 假设有多个线程正在执行异步操作,主线程希望这些异步线程全部完成之后再继续执行后续任务,那么使用CountDownLatch将非常方便.

CountDownLatch的使用

- - 编程语言 - ITeye博客
        CountDownLatch是一个同步辅助类,犹如倒计时计数器,创建对象时通过构造方法设置初始值,调用CountDownLatch对象的await()方法则处于等待状态,调用countDown()方法就将计数器减1,当计数到达0时,则所有等待者或单个等待者开始执行. ExecutorService service = Executors.newCachedThreadPool(); //创建一个线程池.

Java多线程(二)同步

- - CSDN博客编程语言推荐文章
如果你的java基础较弱,或者不大了解java多线程请先看这篇文章 java多线程(一)线程定义、状态和属性. 同步一直是java多线程的难点,在我们做android开发时也很少应用,但这并不是我们不熟悉同步的理由. 希望这篇文章能使更多的人能够了解并且应用java的同步. 在多线程的应用中,两个或者两个以上的线程需要共享对同一个数据的存取.

(多线程)多线程的同步代码块与同步函数

- - 编程语言 - ITeye博客
1.同步代码块,使用的锁可以是任意对象,但是操作共享资源时,锁必须唯一. 2.同步函数,使用的锁是this. //不同的线程进入不同的同步代码中,验证同步函数使用的锁与同步代码块的锁是否一致. //如果不一致,则会导致数据混乱. //改变标记,当b线程开启后,执行run(),就会进入到同步函数中. 判断 num>0 和 num-- 都是对共享资源进行操作,所以要放在同步代码块中.

网络编程——线程同步和线程死锁

- Xin - 博客园-首页原创精华区
    在上一篇《网络编程——多线程技术》中已经说过,在一如多线程技术之后,在一个进程中可以创建多个线程,这多个线程在需要访问同一个资源时,肯定会发生争用现象,在争夺资源的过程中,假如第一个线程先访问这一资源,并对其做了修改,在这个线程没有执行完毕但时间片到了,第二个线程又访问该资源,就可能得到错误的结果.

(三)java线程:线程同步ReentrantLock,condition(await,signal)

- - ITeye博客
(三)线程同步ReentrantLock,condition(await,signal). 一.synchronized和 ReentrantLock 故事. 的线程同步(synchronized ,wait,notify. )讲了synchronized的同步方法,java 就是这么神奇,这里又有一个同步的方法.

Java线程同步中关键字synchronized详述

- - 编程语言 - ITeye博客
synchronized关键可以修饰函数、函数内语句. 无论它加上方法还是对象上,它取得的锁都是对象,而不是把一段代码或是函数当作锁. 1,当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一段时间只能有一个线程得到执行,而另一个线程只有等当前线程执行完以后才能执行这块代码.

Java 多线程同步的五种方法

- - 编程语言 - ITeye博客
4、wait() 与 notify(). 前几天面试,被大师虐残了,好多基础知识必须得重新拿起来啊. 因为当我们有多个线程要同时访问一个变量或对象时,如果这些线程中既有读又有写操作时,就会导致变量值或对象的状态出现混乱,从而导致程序异常. 举 个例子,如果一个银行账户同时被两个线程操作,一个取100块,一个存钱100块.

多线程教程之二---线程间同步 - 白永辉的专栏 - 博客频道 - CSDN.NET

- Yi - blog.csdn.net
资料收集类的 都是比较经典的东西.  安装Chrome浏览器下载资源送30个下载分.                                        500元移动大会门票开抢. 2011移动开发者大会亮点之二:七大论坛神秘嘉宾闪亮登场.                “IT适合你吗.

linux时间同步

- - BlogJava-首页技术区
第一步的意思是设置时间,设置完了可以用date命令查看对不对...注意是月日时分年  . 第二步的意思是写入主板的rtc芯片..  . su -c 'date -s 月/日/年'  . su -c 'date -s 时:分:秒'  . 由于Linux时钟和Windows时钟从概念的分类、使用到设置都有很大的不同,所以,搞清楚Linux时钟的工作方式与设置操作,不仅对于Linux初学者有着重大意义,而且对于使用Linux服务器的用户来说尤为重要.