您的位置:首页 > 其它

主线程等待所有子线程执行完毕后再继续的问题

2017-11-08 16:51 417 查看

1. join 方法

public class WorkThread extends Thread {
@Override
public void run() {
try {
System.out.println(getName() + "run start.");
//模拟完成子任务执行的时间
sleep(1000);
System.out.println(getName() + "run finished.");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

public class Main {
public static void main(String[] args) {
//启动两个子线程执行子任务
WorkThread workThread1 = new WorkThread();
WorkThread workThread2 = new WorkThread();
workThread1.start();
workThread2.start();

//运行后面的业务
System.out.println("run next process.");
}
}


2. countdownlatch 

public class Main {

public static void main(String[] args) {
//创建2个点的CountDownLatch对象
CountDownLatch countDownLatch = new CountDownLatch(2);

//将countDownLatch对象的引用传递给子线程里
WorkThread workThread1 = new WorkThread(countDownLatch);
WorkThread workThread2 = new WorkThread(countDownLatch);
workThread1.start();
workThread2.start();

try {
//调用await方法阻塞当前线程,等待子线程完成后在继续执行
countDownLatch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}

System.out.println("run next process.");
}
}


public class WorkThread extends Thread {
@Override
public void run() {
try {
System.out.println(getName() + "run start.");
//模拟完成子任务执行的时间
sleep(1000);
System.out.println(getName() + "run finished.");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}   
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: