JAVA中CountDownLatch(闭锁)

CountDownLatch(闭锁): 顾明思议,一种计数器减少的闭锁。工作原理就想是红绿灯,当红灯亮的时候所有车辆都要等待,它们都在等待一个状态---绿灯。当绿灯时候所有车辆都可以通过。
CountDownLatch 最常见的用法:初始化一个整数的计数。它的countDown()方法用来对计数器做减法操作。当计数器为零时,所有等待的线程都可以通过。
下面我们来看下CountDownLatch都有那些方法:
await() 当计数器不为零的时候等待
await(long timeout, TimeUnit unit) 等待计数器不为零的时间。如果超过timeout则抛出InterruptedException.当在timeout时间内计数器为零了,则继续执行
countDown() 计数器减去1
getCount() 获取当前计数器值


package com.asiainfo.concurrent;

import java.util.concurrent.CountDownLatch;

/**
 * 关卡测试
 * 
 * @author fansh
 * 
 */
public class LatchTest {

	public static void main(String[] args) {

		final CountDownLatch run = new CountDownLatch(5);
		final CountDownLatch start = new CountDownLatch(1);
		for (int i = 0; i < 5; i++) {
			Thread t = new Thread() {
				@Override
				public void run() {
					try {
						start.await();
					} catch (InterruptedException e) {
						e.printStackTrace();
					} finally {
						System.out.println("线程"
								+ Thread.currentThread().getName()
								+ "将计数器减1.........");
						run.countDown();
					}
				}
			};
			t.start();
		}
		System.out.println("run 线程的计数器为" + run.getCount());
		start.countDown();
		try {
			run.await();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		System.out.println("run 线程的计数器为" + run.getCount());
		System.out.println("等待五个线程运行完毕");
	}

}


猜你喜欢

转载自fanshaohua110.iteye.com/blog/2219576
今日推荐