1. 程式人生 > >CountDownLatch用法---等待多個線程執行完才執行

CountDownLatch用法---等待多個線程執行完才執行

print final stat ack 有一個 tac ber padding ces

CountDownLatch用法---等待多個線程執行完才執行

CountDownLatch用法---等待多個線程執行完才執行

CountDownLatch用法---等待多個線程執行完才執行

CountDownLatch用法---等待多個線程執行完才執行

一.CountDownLatch用法

CountDownLatch類位於java.util.concurrent包下,利用它可以實現類似計數器的功能。比如有一個任務A,它要等待其他4個任務執行完畢之後才能執行,此時就可以利用CountDownLatch來實現這種功能了。

CountDownLatch類只提供了一個構造器:

1 public CountDownLatch(int count) { }; //參數count為計數值

然後下面這3個方法是CountDownLatch類中最重要的方法:

1 2 3 public void await() throws InterruptedException { }; //調用await()方法的線程會被掛起,它會等待直到count值為0才繼續執行 public boolean await(long timeout, TimeUnit unit) throws InterruptedException { };
//和await()類似,只不過等待一定的時間後count值還沒變為0的話就會繼續執行 public void countDown() { }; //將count值減1

下面看一個例子大家就清楚CountDownLatch的用法了:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 public
class Test { public static void main(String[] args) { final CountDownLatch latch = new CountDownLatch(2); new Thread(){ public void run() { try { System.out.println("子線程"+Thread.currentThread().getName()+"正在執行"); Thread.sleep(3000); System.out.println("子線程"+Thread.currentThread().getName()+"執行完畢"); latch.countDown(); } catch (InterruptedException e) { e.printStackTrace(); } }; }.start(); new Thread(){ public void run() { try { System.out.println("子線程"+Thread.currentThread().getName()+"正在執行"); Thread.sleep(3000); System.out.println("子線程"+Thread.currentThread().getName()+"執行完畢"); latch.countDown(); } catch (InterruptedException e) { e.printStackTrace(); } }; }.start(); try { System.out.println("等待2個子線程執行完畢..."); latch.await(); System.out.println("2個子線程已經執行完畢"); System.out.println("繼續執行主線程"); } catch (InterruptedException e) { e.printStackTrace(); } } }

執行結果:

1 2 3 4 5 6 7 線程Thread-0正在執行 線程Thread-1正在執行 等待2個子線程執行完畢... 線程Thread-0執行完畢 線程Thread-1執行完畢 2個子線程已經執行完畢 繼續執行主線程

CountDownLatch用法---等待多個線程執行完才執行