多線程控制工具類--倒計時器CountDownLatch的使用(模仿火箭發射)
阿新 • • 發佈:2018-01-23
-- nbsp sys inter 線程池 main except import 計時
package com.thread.test.Lock; import java.util.Random; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class CountDownLatchDemo implements Runnable { static final CountDownLatch end = new CountDownLatch(10);//創建倒計時器,表示需要等待10個線程,等待在CountDownLatch上的線程才能繼續執行 static final CountDownLatchDemo DEMO = new CountDownLatchDemo(); public void run() { try { Thread.sleep(new Random().nextInt(10) * 1000); System.out.println(Thread.currentThread().getName() + "----check complete"); end.countDown();// 通知倒計時器一個線程完事兒,倒計時器減1 } catch (InterruptedException e) { e.printStackTrace(); } } public static void main(String[] args) throws InterruptedException { // 使用倒計時器來模仿火箭發射 ExecutorService exec = Executors.newFixedThreadPool(10);// 創建10個線程的線程池 for (inti = 0; i < 10; i++) { exec.submit(DEMO); } end.await();// 倒計時器需要等待10個線程的任務全部完成後,主線程才能繼續執行 System.out.println("火箭發射"); exec.shutdown();// 關閉線程池 } }
多線程控制工具類--倒計時器CountDownLatch的使用(模仿火箭發射)