CountDownLatch經典模擬

 

import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class CountDownLatchTest {

	// 模擬了100米賽跑,10名選手已經準備就緒,只等裁判一聲令下。當所有人都到達終點時,比賽結束。
	public static void main(String[] args) throws InterruptedException {

		// 開始的倒數鎖
		final CountDownLatch begin = new CountDownLatch(1);

		// 結束的倒數鎖
		final CountDownLatch end = new CountDownLatch(10);

		// 十名選手
		final ExecutorService exec = Executors.newFixedThreadPool(10);

		for (int index = 0; index < 10; index++) {
			final int NO = index + 1;
			Runnable run = new Runnable() {
				public void run() {
					try {
						// 如果當前計數爲零,則此方法立即返回。
						// 等待
						begin.await();
						Thread.sleep((long) (Math.random() * 10000));
						System.out.println("No." + NO + " arrived");
					} catch (InterruptedException e) {
					} finally {
						// 每個選手到達終點時,end就減一
						end.countDown();
					}
				}
			};
			exec.submit(run);
		}
		System.out.println("Game Start");
		// begin減一,開始遊戲
		begin.countDown();
		// 等待end變爲0,即所有選手到達終點
		end.await();
		System.out.println("Game Over");
		exec.shutdown();
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章