java需要主线程等待子线程执行完毕后再执行,有哪些方法可以实现
时间: 2024-04-16 17:14:43 浏览: 38
1. 使用Thread.join()方法,可以让主线程等待子线程执行完毕后再继续执行。
2. 使用CountDownLatch类,可以让主线程等待一组线程执行完毕后再继续执行。
3. 使用Future和Callable接口,可以让主线程等待子线程的返回结果后再继续执行。
4. 使用wait()和notify()方法,可以让主线程等待子线程执行完毕后再继续执行。
5. 使用线程池,可以让主线程提交任务后等待所有任务执行完毕后再继续执行。
相关问题
Hutool中等待子线程执行完毕,再执行主线程
在Hutool中,可以使用CountDownLatch(倒计时门闩)来实现等待子线程执行完毕再执行主线程的功能。
具体实现步骤如下:
1. 在主线程中创建CountDownLatch对象,并设置计数器的值为子线程的数量。
2. 在子线程中执行完相关任务后,调用CountDownLatch对象的countDown()方法,将计数器减1。
3. 在主线程中调用CountDownLatch对象的await()方法,等待计数器归零,即所有子线程执行完毕。
4. 主线程在等待子线程执行完毕后,即可继续执行其他任务。
示例代码如下:
```java
import java.util.concurrent.CountDownLatch;
public class Test {
public static void main(String[] args) throws InterruptedException {
int threadCount = 5; // 子线程数量
CountDownLatch countDownLatch = new CountDownLatch(threadCount);
for (int i = 0; i < threadCount; i++) {
new Thread(new Task(countDownLatch)).start();
}
countDownLatch.await(); // 等待子线程执行完毕
System.out.println("所有子线程执行完毕,主线程继续执行。");
}
static class Task implements Runnable {
private CountDownLatch countDownLatch;
public Task(CountDownLatch countDownLatch) {
this.countDownLatch = countDownLatch;
}
@Override
public void run() {
try {
// 子线程执行相关任务
Thread.sleep(1000);
System.out.println("子线程执行完毕。");
countDownLatch.countDown(); // 计数器减1
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
```
java在多线程中主线程等待子线程运行结束再执行的代码示例
以下是一个Java多线程中主线程等待子线程运行结束再执行的代码示例:
```
public class Main {
public static void main(String[] args) throws InterruptedException {
Thread t = new Thread(new MyRunnable());
t.start();
t.join(); // 等待子线程t执行完毕
System.out.println("主线程执行完毕");
}
}
class MyRunnable implements Runnable {
@Override
public void run() {
System.out.println("子线程开始执行");
try {
Thread.sleep(5000); // 模拟子线程执行耗时操作
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("子线程执行完毕");
}
}
```
在这个示例中,主线程创建并启动了一个子线程t,然后调用t.join()方法等待子线程t执行完毕,最后输出"主线程执行完毕"。子线程t执行了一个模拟耗时操作,然后输出"子线程执行完毕"。