import java.util.concurrent.*;
public class ThreadPoolExample {
public static void main(String[] args) {
// 创建一个固定大小的线程池
ExecutorService executor = Executors.newFixedThreadPool(5);
// 提交多个任务到线程池中执行
for (int i = 0; i < 10; i++) {
Runnable worker = new WorkerThread("Task " + i);
executor.execute(worker);
}
// 关闭线程池,不再接受新的任务
executor.shutdown();
// 等待所有任务完成
while (!executor.isTerminated()) {
}
System.out.println("Finished all threads");
}
}
class WorkerThread implements Runnable {
private String task;
public WorkerThread(String s) {
this.task = s;
}
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + " Start. Task = " + task);
processTask();
System.out.println(Thread.currentThread().getName() + " End.");
}
private void processTask() {
try {
Thread.sleep(2000); // 模拟任务处理时间
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
创建线程池:
Executors.newFixedThreadPool(5) 创建了一个固定大小为 5 的线程池。这个线程池会维护 5 个线程,并且这些线程会在空闲时等待新任务。提交任务:
executor.execute(worker) 将多个任务提交给线程池执行。每个任务都是一个实现了 Runnable 接口的 WorkerThread 实例。关闭线程池:
executor.shutdown() 方法会关闭线程池,表示不再接受新的任务,但会继续执行已经提交的任务。while (!executor.isTerminated()) 等待所有任务完成。任务类:
WorkerThread 类实现了 Runnable 接口,定义了任务的具体执行逻辑。每个任务在运行时会输出当前线程名和任务名,并模拟了一个耗时 2 秒的任务处理过程。通过这种方式,Java 线程池可以有效地管理和复用线程资源,避免频繁创建和销毁线程带来的性能开销。
上一篇:java获取服务器ip和端口号
下一篇:linux查看java进程命令
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站