CountDownLatch用法---等待多個線程執行完才執行
阿新 • • 發佈:2018-03-30
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用法---等待多個線程執行完才執行