写一个java线程池的简单应用,主线程需要等待多个子线程执行完成后输出一句话
时间: 2023-03-05 09:43:04 浏览: 72
好的,以下是一个简单的 Java 线程池应用示例,主线程创建一个固定大小的线程池,提交多个任务给线程池执行,主线程需要等待所有任务执行完成后输出一句话。
```java
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
public class ThreadPoolExample {
public static void main(String[] args) throws InterruptedException {
int numTasks = 5;
ExecutorService executor = Executors.newFixedThreadPool(2); // 创建一个固定大小为2的线程池
for (int i = 1; i <= numTasks; i++) {
Runnable task = new Task(i);
executor.submit(task); // 提交任务给线程池执行
}
executor.shutdown(); // 关闭线程池
executor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS); // 等待所有任务执行完成
System.out.println("所有任务执行完成!");
}
static class Task implements Runnable {
private final int taskId;
Task(int taskId) {
this.taskId = taskId;
}
@Override
public void run() {
System.out.println("任务 " + taskId + " 开始执行,线程名为 " + Thread.currentThread().getName());
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("任务 " + taskId + " 执行完成,线程名为 " + Thread.currentThread().getName());
}
}
}
```
在上面的示例中,`Task` 类实现了 `Runnable` 接口,表示一个要执行的任务,每个任务会在执行前输出一个信息和当前执行该任务的线程名,然后等待 2 秒钟,之后输出一个信息和当前执行该任务的线程名,表示任务已经执行完成。
`main` 方法中创建了一个固定大小为 2 的线程池,提交了 5 个任务给线程池执行。然后调用了 `executor.shutdown()` 方法关闭线程池,并调用 `executor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS)` 方法等待所有任务执行完成,之后输出一句话表示所有任务执行完成。