知識總結-Java併發之CountDownLatch、CyclicBarrier、Semaphore

CountDownLatch

使一個或者多個線程等待直到其他N個線程執行完成,初始化一個count,當這個count變成0的時候,會喚醒等待的線程,注意這個count不能被重置,調用countDown方法,count就會減一。需要等待的線程調用await方法使自己阻塞等待,其他線程通過調用countDown方法將count減一,直到count=0,阻塞等待的線程就恢復繼續執行。

知識總結-Java併發之CountDownLatch、CyclicBarrier、Semaphore


知識總結-Java併發之CountDownLatch、CyclicBarrier、Semaphore

輸出結果

知識總結-Java併發之CountDownLatch、CyclicBarrier、Semaphore

CyclicBarrier

初始化N個數量,使一組線程互相等待直到某個條件觸發,直到所有線程都到達某個條件點。每個線程通過調用await方法使自己阻塞,等到所有線程都調用await方法之後,所有在等待的線程都會恢復繼續執行。

知識總結-Java併發之CountDownLatch、CyclicBarrier、Semaphore


知識總結-Java併發之CountDownLatch、CyclicBarrier、Semaphore

輸出結果

知識總結-Java併發之CountDownLatch、CyclicBarrier、Semaphore

Semaphore

初始化N個許可,同時最多隻能有N個線程擁有這些許可,否則會阻塞,經常用來控制某些重要資源的併發訪問量。某個線程通過調用acquire方法獲取許可,如果獲取不到會阻塞等待。調用tryAcquire方法嘗試獲取許可,不會阻塞當前線程,調用release方法釋放許可,這樣別的線程才能獲取許可。



分享到:


相關文章: