java-多執行緒-CountDownLatch(閉鎖) CyclicBarrier(柵欄) Semaphore(訊號量)-
阿新 • • 發佈:2019-01-13
(程式碼來源網路共享)
這幾個工具類其實說白了就是為了能夠更好控制執行緒之間的通訊問題~
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