一、原始代以下,如何保證線程1、線程二執行完以後,再執行System.out.println("主線程")ide
public static void main(String[] args) throws Exception{spa
new Thread(new Runnable() {線程
@Overrideit
public void run() {io
System.out.println("子線程1開始執行");class
try {im
Thread.sleep(10);static
} catch (InterruptedException e) {img
}di
System.out.println("子線程1執行結束");
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("子線程2開始執行");
try {
Thread.sleep(10);
} catch (InterruptedException e) {
}
System.out.println("子線程2執行結束");
}
}).start();
System.out.println("主線程");
}
執行結果以下
二、使用CountDownLatch
public static void main(String[] args) throws Exception{
CountDownLatch count = new CountDownLatch(2);
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("子線程1開始執行");
try {
Thread.sleep(10);
} catch (InterruptedException e) {
}
System.out.println("子線程1執行結束");
count.countDown();
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("子線程2開始執行");
try {
Thread.sleep(10);
} catch (InterruptedException e) {
}
System.out.println("子線程2執行結束");
count.countDown();
}
}).start();
count.await();
System.out.println("主線程");
}
執行結果以下