java-多執行緒-CountDownLatch(閉鎖) CyclicBarrier(柵欄) Semaphore(訊號量)-

rodertW發表於2019-01-11

(程式碼來源網路共享)

這幾個工具類其實說白了就是為了能夠更好控制執行緒之間的通訊問題~

CountDownLatch 

是一個同步的輔助類,允許一個或多個執行緒一直等待直到其它執行緒完成它們的操作。

常用的API其實就兩個:await()countDown()

例子:例子:rodert現在去做實習生了,其他的員工還沒下班,rodert不好意思先走,等其他的員工都走光了,rodert再走。

package threadMy;

import java.util.concurrent.CountDownLatch;

public class CountDownLatchTest {

	public static void main(String[] args) {

		final CountDownLatch countDownLatch = new CountDownLatch(5);

		System.out.println("現在6點下班了.....");

		// rodert執行緒啟動
		new Thread(new Runnable() {
			@Override
			public void run() {

				try {
					// 這裡呼叫的是await()不是wait()
					countDownLatch.await();
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				System.out.println("...其他的5個員工走光了,rodert終於可以走了");
			}
		}).start();

		// 其他員工執行緒啟動
		for (int i = 0; i < 5; i++) {
			new Thread(new Runnable() {
				@Override
				public void run() {
					System.out.println("員工xxxx下班了");
					countDownLatch.countDown();
				}
			}).start();
		}
	}
}

CyclicBarrier

 

相關文章