如果想在Java中实现主线程等待所有子线程执行完毕再执行,可以使用以下步骤:
1. 定义多个子线程
定义具体的子线程类,重写run方法实现具体的任务逻辑。以下是一个简单的示例:
class MyThread implements Runnable {
private String name;
public MyThread(String name) {
this.name = name;
}
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println(name + "执行第" + i + "次任务");
}
}
}
2. 创建多个子线程
在主线程中创建多个子线程。以下是一个示例,创建了3个子线程:
public static void main(String[] args) {
Thread thread1 = new Thread(new MyThread("子线程1"));
Thread thread2 = new Thread(new MyThread("子线程2"));
Thread thread3 = new Thread(new MyThread("子线程3"));
// 启动多个子线程
thread1.start();
thread2.start();
thread3.start();
}
3. 等待多个子线程执行完毕
使用join方法等待多个子线程执行完毕。在主线程中调用子线程的join方法,以阻塞主线程,直到该子线程执行完毕。以下是一个示例:
public static void main(String[] args) {
Thread thread1 = new Thread(new MyThread("子线程1"));
Thread thread2 = new Thread(new MyThread("子线程2"));
Thread thread3 = new Thread(new MyThread("子线程3"));
// 启动多个子线程
thread1.start();
thread2.start();
thread3.start();
try {
// 等待子线程执行完毕
thread1.join();
thread2.join();
thread3.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
// 所有子线程执行完毕后执行的代码
System.out.println("所有子线程执行完毕");
}
另外一个示例是使用线程池来实现多线程。以下是一个示例:
1. 定义任务类
定义具体的任务类,实现Runnable接口,具体的任务逻辑实现在run方法中。以下是一个示例:
class MyTask implements Runnable {
private String name;
public MyTask(String name) {
this.name = name;
}
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println(name + "执行第" + i + "次任务");
}
}
}
2. 使用线程池执行任务
使用ExecutorService创建一个线程池,调用submit方法提交任务。使用invokeAll方法提交多个任务,该方法会阻塞当前线程,直到所有任务执行完毕。以下是一个示例:
public static void main(String[] args) {
ExecutorService executorService = Executors.newFixedThreadPool(3);
List<MyTask> tasks = new ArrayList<>();
tasks.add(new MyTask("任务1"));
tasks.add(new MyTask("任务2"));
tasks.add(new MyTask("任务3"));
try {
// 提交多个任务
executorService.invokeAll(tasks);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 所有任务执行完毕后执行的代码
System.out.println("所有任务执行完毕");
// 关闭线程池
executorService.shutdown();
}
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java多线程–让主线程等待所有子线程执行完毕在执行 - Python技术站