java同步例子之闭锁(CountDownLatch)

在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待,在某些场景下同CyclicBarrier类似。
package concurrent;

import java.util.concurrent.CountDownLatch;

/**
 * 闭锁,要关注await,countDown的异常,
 * @author user
 *
 */
public class CountDownLatchTest {
	
	public void timeTasks(int nThreads, final Runnable task) throws InterruptedException{
		final CountDownLatch startGate = new CountDownLatch(1);
		for(int i = 0; i < nThreads; i++){
			Thread t = new Thread(){
				public void run(){
					try {
						startGate.await();
						task.run();
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			};
			t.start();
		}
		System.err.println("当前计数:"+startGate.getCount());
		startGate.countDown();
		System.err.println("当前计数:"+startGate.getCount());
	}

	/**
	 * @param args
	 * @throws InterruptedException 
	 */
	public static void main(String[] args) throws InterruptedException {
		CountDownLatchTest test = new CountDownLatchTest();
		test.timeTasks(2, new Runnable() {			
			@Override
			public void run() {
				System.err.println("to do .....");				
			}
		});
	}

}

你可能感兴趣的:(java,Concurrent,CountDownLatch)