創建線程類 : 設置CountDownLatch成員變量,並且在run方法末尾調用CountDownLatch實例的CountDown()方法。
調用該類: 設置所需工作的線程數量,作為構造參數生成線程實例對象,啟動所有線程,調用CountDownLatch的await方法。
// 創建一個線程 並設置成員變量 CountDownLatch package multi.thread; import java.util.concurrent.CountDownLatch; public class ImportThread extends Thread { private CountDownLatch threadsSignal; public ImportThread(CountDownLatch threadsSignal){ this.threadsSignal = threadsSignal; } @Override public void run(){ System.out.println(Thread.currentThread().getName()+" :: start..."); // do something... threadsSignal.countDown(); // when the thread end the number will minus 1 System.out.println(Thread.currentThread().getName() + "結束,還有" + threadsSignal.getCount() + " 個線程"); } }
package multi.thread; import java.util.concurrent.CountDownLatch; public class TestEnd { public static void main(String[] args) { int threadNum = 4; CountDownLatch threadSignal = new CountDownLatch(threadNum); // 初始化countDown for (int i = 0; i < threadNum; i++) { Thread t = new ImportThread(threadSignal); t.start(); } try { threadSignal.await(); // 等待所有子線程完成 System.out.println(Thread.currentThread().getName() + "結束..."); } catch (InterruptedException e) { e.printStackTrace(); } } }