CountDownLatch的使用

CountDownLatch爲一個同步輔助類,在完成一組正在其他線程中執行的操作之前,它允許一個或多個線程一直等待。

方法說明:

  1. await() 使當前線程在鎖存器倒計數至零之前一直等待,除非線程被中斷

  2. countDown() 遞減鎖存器的計數,如果計數到達零,則釋放所有等待的線程

  3. getCount() 返回當前計數

相關實例說明:

import org.springframework.stereotype.Component;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

@Component
public class CountDownLatchTest {
   public static void main(String[] args) throws InterruptedException {
      final CountDownLatch begin = new CountDownLatch(1);
      final CountDownLatch end = new CountDownLatch(10);

      ExecutorService es = Executors.newFixedThreadPool(10);
      for (int i = 0; i < 10; i++) {
         final int index = i + 1;
         es.submit(new Runnable() {
            public void run() {
               try {
                  begin.await(); // 等待指令
                  int s = (int)(Math.random() * 1000);
                  Thread.sleep(s);
                  System.out.println(String.format("No.%d到達,花費時間:%d毫秒!", index, s));
                  end.countDown();
               } catch (Exception e) {
                  e.printStackTrace();
               }
            }
         });
      }
      System.out.println("各就位,預備跑!");
      begin.countDown();
      end.await();
      System.out.println("Game over!");

      es.shutdown();
   }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章