import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
public class ThreadPoolExample {
public static void main(String[] args) {
// 创建一个固定大小的线程池,大小为 5
ExecutorService executor = Executors.newFixedThreadPool(5);
// 提交 10 个任务到线程池中执行
for (int i = 0; i < 10; i++) {
Runnable worker = new WorkerThread("Task " + i);
executor.execute(worker);
}
// 关闭线程池,不再接受新的任务
executor.shutdown();
System.out.println("所有任务已提交,等待完成...");
// 等待所有任务完成
try {
if (!executor.awaitTermination(60, TimeUnit.SECONDS)) {
executor.shutdownNow(); // 如果在指定时间内没有完成,则强制关闭线程池
}
} catch (InterruptedException e) {
executor.shutdownNow();
Thread.currentThread().interrupt();
}
System.out.println("所有任务已完成");
}
}
class WorkerThread implements Runnable {
private String taskName;
public WorkerThread(String taskName) {
this.taskName = taskName;
}
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + " 开始执行: " + taskName);
try {
// 模拟任务执行时间
Thread.sleep(2000);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
System.out.println(Thread.currentThread().getName() + " 完成执行: " + taskName);
}
}
创建线程池:
Executors.newFixedThreadPool(5) 创建了一个固定大小为 5 的线程池。这意味着最多有 5 个线程可以同时执行任务。提交任务:
executor.execute(worker) 提交了 10 个任务给线程池。每个任务都是一个实现了 Runnable 接口的对象。关闭线程池:
executor.shutdown() 表示不再接受新的任务,但会继续执行已经提交的任务。awaitTermination 方法等待所有任务完成。如果在指定时间内(这里是 60 秒)没有完成所有任务,则调用 shutdownNow 强制关闭线程池。任务执行:
WorkerThread 类中实现,模拟了 2 秒的执行时间,并打印出当前线程名称和任务名称。这个例子展示了如何使用 Java 的线程池来管理多个任务的并发执行。
上一篇:java从list中查找匹配属性
下一篇:java xms
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站