帮我用java写一个多个父任务嵌套多个子任务,子任务与父任务一一对应,父任务等待与之对应的子任务执行完成在执行的demo
时间: 2024-02-06 07:10:12 浏览: 9
好的,以下是一个简单的Java代码示例,可以实现多个父任务嵌套多个子任务,子任务与父任务一一对应,父任务等待与之对应的子任务执行完成在执行:
```java
import java.util.ArrayList;
import java.util.List;
public class Demo {
public static void main(String[] args) throws InterruptedException {
// 父任务列表
List<ParentTask> parentTasks = new ArrayList<>();
for (int i = 0; i < 3; i++) {
ParentTask parentTask = new ParentTask(i);
parentTasks.add(parentTask);
// 子任务列表
List<ChildTask> childTasks = new ArrayList<>();
for (int j = 0; j < 4; j++) {
ChildTask childTask = new ChildTask(i, j);
childTasks.add(childTask);
}
parentTask.setChildTasks(childTasks);
}
// 执行父任务
for (ParentTask parentTask : parentTasks) {
parentTask.start();
}
// 等待所有父任务完成
for (ParentTask parentTask : parentTasks) {
parentTask.join();
}
System.out.println("All tasks have been completed.");
}
}
// 父任务
class ParentTask extends Thread {
private int id;
private List<ChildTask> childTasks;
public ParentTask(int id) {
this.id = id;
}
public void setChildTasks(List<ChildTask> childTasks) {
this.childTasks = childTasks;
}
@Override
public void run() {
System.out.println("Parent task " + id + " is running.");
// 执行子任务
for (ChildTask childTask : childTasks) {
childTask.start();
}
// 等待所有子任务完成
for (ChildTask childTask : childTasks) {
try {
childTask.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("Parent task " + id + " has been completed.");
}
}
// 子任务
class ChildTask extends Thread {
private int parentId;
private int id;
public ChildTask(int parentId, int id) {
this.parentId = parentId;
this.id = id;
}
@Override
public void run() {
System.out.println("Child task " + parentId + "-" + id + " is running.");
// 模拟子任务执行
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Child task " + parentId + "-" + id + " has been completed.");
}
}
```
在这个代码示例中,首先创建了多个父任务和对应的子任务,并将子任务列表设置给每个父任务。然后执行所有父任务,每个父任务会执行对应的子任务,并等待所有子任务完成后再结束。最后等待所有父任务完成后输出提示信息。
注意,在这个代码示例中,父任务和子任务都继承了Thread类,通过重写run方法来实现具体的任务逻辑。在父任务中,使用start方法来启动所有子任务,并使用join方法来等待所有子任务完成。在子任务中,模拟了一个耗时的任务,通过sleep方法来实现。