30.15如何创建一个具有三个固定线程的线程池?如何提交一个任务到一个线程池中?如何知道所有的任务都完成了?
时间: 2024-12-19 09:19:48 浏览: 2
在Java中,可以使用`Executors`类中的静态工厂方法来创建一个具有固定线程数的线程池,如`ThreadPoolExecutor`。以下是创建一个有三个固定线程的线程池的步骤:
```java
import java.util.concurrent.*;
public class FixedThreadPoolExample {
public static void main(String[] args) {
// 创建一个定长线程池,核心线程数为3,最大线程数也是3,并提供无界队列
ExecutorService executor = Executors.newFixedThreadPool(3);
// 提交任务到线程池
for (int i = 0; i < 10; i++) { // 假设我们有10个任务需要并行处理
Runnable worker = new WorkerThread("" + i);
executor.execute(worker); // 使用execute方法提交任务
}
// 关闭线程池,停止接受新的任务
executor.shutdown();
// 等待所有任务完成
try {
if (!executor.awaitTermination(60, TimeUnit.SECONDS)) {
executor.shutdownNow(); // 如果60秒内没有完成,则强制终止
System.out.println("Pool did not terminate");
}
} catch (InterruptedException e) {
executor.shutdownNow();
Thread.currentThread().interrupt();
}
System.out.println("All tasks completed.");
}
}
// 示例工作线程类
class WorkerThread implements Runnable {
private String taskName;
public WorkerThread(String name) {
this.taskName = name;
}
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + " started executing task: " + taskName);
// 这里替换为实际的任务逻辑
try {
Thread.sleep(2000); // 模拟耗时操作
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + " finished task: " + taskName);
}
}
```
在这个例子中,`WorkerThread`实现了`Runnable`接口,然后提交给`ExecutorService`。当`awaitTermination()`方法的超时时间到达或者线程池关闭时,程序会检查是否所有任务都已经完成。
阅读全文