首页 > 应用开发 > Java > Java 中如何实现一个线程池?
在 Java 中,可以通过以下方式实现一个线程池:
使用 ExecutorService(推荐):Java 提供了内置的线程池实现,简单易用且高效。
自定义线程池:通过实现线程池的核心逻辑来自行实现。
以下分别介绍如何使用 Java 内置线程池 和 自定义线程池。
方法一:使用 ExecutorService
ExecutorService 是 Java 的线程池框架,可以通过 Executors 工厂类轻松创建。
示例:固定大小线程池
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ThreadPoolExample {
public static void main(String[] args) {
// 创建一个固定大小的线程池,线程池大小为 3
ExecutorService executorService = Executors.newFixedThreadPool(3);
// 提交任务到线程池
for (int i = 0; i < 10; i++) {
int taskId = i;
executorService.execute(() -> {
System.out.println("任务 " + taskId + " 执行线程: " + Thread.currentThread().getName());
try {
Thread.sleep(1000); // 模拟任务执行
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
});
}
// 关闭线程池
executorService.shutdown();
}
}
常见线程池类型
Executors.newFixedThreadPool(int nThreads):固定大小的线程池,线程数量固定,适用于稳定并发任务。
Executors.newCachedThreadPool():可缓存的线程池,线程数量动态变化,适用于短期大量任务。
Executors.newSingleThreadExecutor():单线程池,适用于任务串行执行。
Executors.newScheduledThreadPool(int corePoolSize):调度线程池,支持定时任务或周期性任务。
方法二:使用 ThreadPoolExecutor 自定义线程池
Java 的 ThreadPoolExecutor 提供了更高级的自定义线程池选项。
示例:自定义线程池
import java.util.concurrent.*;
public class CustomThreadPoolExample {
public static void main(String[] args) {
// 自定义线程池
ThreadPoolExecutor threadPool = new ThreadPoolExecutor(
2, // 核心线程数
4, // 最大线程数
60, // 空闲线程的存活时间
TimeUnit.SECONDS, // 时间单位
new LinkedBlockingQueue<>(2), // 队列容量
Executors.defaultThreadFactory(), // 线程工厂
new ThreadPoolExecutor.AbortPolicy() // 拒绝策略
);
// 提交任务到线程池
for (int i = 0; i < 10; i++) {
int taskId = i;
threadPool.execute(() -> {
System.out.println("任务 " + taskId + " 执行线程: " + Thread.currentThread().getName());
try {
Thread.sleep(1000); // 模拟任务执行
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
});
}
// 关闭线程池
threadPool.shutdown();
}
}
参数说明
核心线程数 (corePoolSize):线程池中始终存活的线程数。
最大线程数 (maximumPoolSize):线程池允许的最大线程数。
空闲线程存活时间 (keepAliveTime):当线程数超过核心线程数时,空闲线程存活的时间。
任务队列 (BlockingQueue):存放等待执行的任务,例如:
ArrayBlockingQueue:有界队列。
LinkedBlockingQueue:无界队列。
线程工厂 (ThreadFactory):用于创建线程的工厂。
拒绝策略 (RejectedExecutionHandler):当线程池任务队列已满时的处理策略,例如:
AbortPolicy:抛出异常。
CallerRunsPolicy:调用线程执行任务。
DiscardPolicy:丢弃任务,不抛出异常。
DiscardOldestPolicy:丢弃队列中最旧的任务。
方法三:完全手动实现线程池
如果想手动实现线程池,可以通过创建一个任务队列和一组工作线程来实现。
示例:手动实现线程池
import java.util.LinkedList;
import java.util.Queue;
class CustomThreadPool {
private final Queue<Runnable> taskQueue = new LinkedList<>();
private final Thread[] workerThreads;
private volatile boolean isShutdown = false;
public CustomThreadPool(int numThreads) {
workerThreads = new Thread[numThreads];
for (int i = 0; i < numThreads; i++) {
workerThreads[i] = new Worker();
workerThreads[i].start();
}
}
public synchronized void submit(Runnable task) {
if (isShutdown) {
throw new IllegalStateException("线程池已关闭");
}
taskQueue.offer(task);
notify(); // 通知工作线程
}
public synchronized void shutdown() {
isShutdown = true;
notifyAll(); // 通知所有线程退出
}
private class Worker extends Thread {
public void run() {
while (true) {
Runnable task;
synchronized (CustomThreadPool.this) {
while (taskQueue.isEmpty() && !isShutdown) {
try {
CustomThreadPool.this.wait();
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
return;
}
}
if (isShutdown && taskQueue.isEmpty()) {
return;
}
task = taskQueue.poll();
}
try {
task.run();
} catch (RuntimeException e) {
System.err.println("任务执行异常: " + e.getMessage());
}
}
}
}
}
public class ManualThreadPoolExample {
public static void main(String[] args) {
CustomThreadPool threadPool = new CustomThreadPool(3);
// 提交任务
for (int i = 0; i < 10; i++) {
int taskId = i;
threadPool.submit(() -> {
System.out.println("任务 " + taskId + " 执行线程: " + Thread.currentThread().getName());
try {
Thread.sleep(1000); // 模拟任务执行
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
});
}
threadPool.shutdown();
}
}
总结
ExecutorService 和 ThreadPoolExecutor 是推荐的线程池实现方式,功能强大且易用。
自定义线程池:适合需要特殊行为的场景,但需要小心管理并发和资源。
调优建议:
根据任务特点调整核心线程数和队列大小。
使用合理的拒绝策略处理超载任务。
https://www.douguo.com/caipu/%E6%AD%90%E5%8D%9A%E7%A7%81%E7%B6%B2VX%3Aa9685288
https://www.douguo.com/caipu/%E6%AD%90%E5%8D%9A%E7%A7%81%E7%B6%B2%E5%90%88%E4%BD%9CVX%3Aa9685288
https://www.douguo.com/caipu/%E6%AD%90%E5%8D%9A%E7%A7%81%E7%B6%B2%E5%8C%85%E6%AE%BAVX%3Aa9685288
https://www.douguo.com/caipu/%E6%AD%90%E5%8D%9A%E7%A7%81%E7%B6%B2%E6%93%8D%E6%8E%A7VX%3Aa9685288
https://www.douguo.com/caipu/%E6%AD%90%E5%8D%9A%E5%81%87%E7%B6%B2VX%3Aa9685288
https://www.douguo.com/caipu/%E6%AD%90%E5%8D%9A%E5%81%87%E7%B6%B2%E5%90%88%E4%BD%9CVX%3Aa9685288
https://www.douguo.com/caipu/%E6%AD%90%E5%8D%9A%E5%81%87%E7%B6%B2%E5%8C%85%E6%AE%BAVX%3Aa9685288
https://www.douguo.com/caipu/%E6%AD%90%E5%8D%9A%E5%81%87%E7%B6%B2%E4%B8%80%E6%AF%94%E4%B8%80VX%3Aa9685288
https://www.douguo.com/caipu/%E6%AD%90%E5%8D%9A%E5%8C%85%E6%AE%BA%E7%B6%B2VX%3Aa9685288
https://www.douguo.com/caipu/%E6%AD%90%E5%8D%9A%E5%8C%85%E6%AE%BA%E8%B2%B7%E5%88%86VX%3Aa9685288
https://www.douguo.com/caipu/%E6%AD%90%E5%8D%9A%E5%8C%85%E6%AE%BA%E7%B6%B2%E5%90%88%E4%BD%9CVX%3Aa9685288
https://www.douguo.com/caipu/%E6%AD%90%E5%8D%9A1%E6%AF%941VX%3Aa9685288
https://www.douguo.com/caipu/%E6%AD%90%E5%8D%9A%E4%B8%80%E6%AF%94%E4%B8%80VX%3Aa9685288
https://www.douguo.com/caipu/%E6%AD%90%E5%8D%9A1%E6%AF%941%E7%A7%81%E7%B6%B2VX%3Aa9685288
https://www.douguo.com/caipu/%E6%AD%90%E5%8D%9A1%E6%AF%941%E5%81%87%E7%B6%B2VX%3Aa9685288
https://www.douguo.com/caipu/%E6%AD%90%E5%8D%9A%E4%B8%80%E6%AF%94%E4%B8%80%E5%90%88%E4%BD%9CVX%3Aa9685288
https://www.douguo.com/caipu/%E4%BA%9E%E6%98%9F%E7%A7%81%E7%B6%B2VX%3Aa9685288
https://www.douguo.com/caipu/%E4%BA%9E%E6%98%9F%E7%A7%81%E7%B6%B2%E5%90%88%E4%BD%9CVX%3Aa9685288
https://www.douguo.com/caipu/%E4%BA%9E%E6%98%9F%E7%A7%81%E7%B6%B2%E5%8C%85%E6%AE%BAVX%3Aa9685288
https://www.douguo.com/caipu/%E4%BA%9E%E6%98%9F%E7%A7%81%E7%B6%B2%E6%93%8D%E6%8E%A7VX%3Aa9685288
https://www.douguo.com/caipu/%E4%BA%9E%E6%98%9F%E5%81%87%E7%B6%B2VX%3Aa9685288
https://www.douguo.com/caipu/%E4%BA%9E%E6%98%9F%E5%81%87%E7%B6%B2%E5%90%88%E4%BD%9CVX%3Aa9685288
https://www.douguo.com/caipu/%E4%BA%9E%E6%98%9F%E5%81%87%E7%B6%B2%E5%8C%85%E6%AE%BAVX%3Aa9685288
https://www.douguo.com/caipu/%E4%BA%9E%E6%98%9F%E5%81%87%E7%B6%B2%E4%B8%80%E6%AF%94%E4%B8%80VX%3Aa9685288
https://www.douguo.com/caipu/%E4%BA%9E%E6%98%9F%E5%8C%85%E6%AE%BA%E7%B6%B2VX%3Aa9685288
https://www.douguo.com/caipu/%E4%BA%9E%E6%98%9F%E5%8C%85%E6%AE%BA%E8%B2%B7%E5%88%86VX%3Aa9685288
https://www.douguo.com/caipu/%E4%BA%9E%E6%98%9F%E5%8C%85%E6%AE%BA%E7%B6%B2%E5%90%88%E4%BD%9CVX%3Aa9685288
https://www.douguo.com/caipu/%E4%BA%9E%E6%98%9F1%E6%AF%941VX%3Aa9685288
https://www.douguo.com/caipu/%E4%BA%9E%E6%98%9F%E4%B8%80%E6%AF%94%E4%B8%80VX%3Aa9685288
https://www.douguo.com/caipu/%E4%BA%9E%E6%98%9F1%E6%AF%941%E7%A7%81%E7%B6%B2VX%3Aa9685288
https://www.douguo.com/caipu/%E4%BA%9E%E6%98%9F1%E6%AF%941%E5%81%87%E7%B6%B2VX%3Aa9685288
https://www.douguo.com/caipu/%E4%BA%9E%E6%98%9F%E4%B8%80%E6%AF%94%E4%B8%80%E5%90%88%E4%BD%9CVX%3Aa9685288
https://www.douguo.com/caipu/%E7%92%B0%E7%90%83360%E7%A7%81%E7%B6%B2VX%3Aa9685288
https://www.douguo.com/caipu/%E7%92%B0%E7%90%83360%E7%A7%81%E7%B6%B2%E5%90%88%E4%BD%9CVX%3Aa9685288
https://www.douguo.com/caipu/%E7%92%B0%E7%90%83360%E7%A7%81%E7%B6%B2%E5%8C%85%E6%AE%BAVX%3Aa9685288
https://www.douguo.com/caipu/%E7%92%B0%E7%90%83360%E7%A7%81%E7%B6%B2%E6%93%8D%E6%8E%A7VX%3Aa9685288
https://www.douguo.com/caipu/%E7%92%B0%E7%90%83360%E5%81%87%E7%B6%B2VX%3Aa9685288
https://www.douguo.com/caipu/%E7%92%B0%E7%90%83360%E5%81%87%E7%B6%B2%E5%90%88%E4%BD%9CVX%3Aa9685288
https://www.douguo.com/caipu/%E7%92%B0%E7%90%83360%E5%81%87%E7%B6%B2%E5%8C%85%E6%AE%BAVX%3Aa9685288
https://www.douguo.com/caipu/%E7%92%B0%E7%90%83360%E5%81%87%E7%B6%B2%E4%B8%80%E6%AF%94%E4%B8%80VX%3Aa9685288
https://www.douguo.com/caipu/%E7%92%B0%E7%90%83360%E5%8C%85%E6%AE%BA%E7%B6%B2VX%3Aa9685288
https://www.douguo.com/caipu/%E7%92%B0%E7%90%83360%E5%8C%85%E6%AE%BA%E8%B2%B7%E5%88%86VX%3Aa9685288
https://www.douguo.com/caipu/%E7%92%B0%E7%90%83360%E5%8C%85%E6%AE%BA%E7%B6%B2%E5%90%88%E4%BD%9CVX%3Aa9685288
https://www.douguo.com/caipu/%E7%92%B0%E7%90%833601%E6%AF%941VX%3Aa9685288
https://www.douguo.com/caipu/%E7%92%B0%E7%90%83360%E4%B8%80%E6%AF%94%E4%B8%80VX%3Aa9685288
https://www.douguo.com/caipu/%E7%92%B0%E7%90%833601%E6%AF%941%E7%A7%81%E7%B6%B2VX%3Aa9685288
https://www.douguo.com/caipu/%E7%92%B0%E7%90%833601%E6%AF%941%E5%81%87%E7%B6%B2VX%3Aa9685288
https://www.douguo.com/caipu/%E7%92%B0%E7%90%83360%E4%B8%80%E6%AF%94%E4%B8%80%E5%90%88%E4%BD%9CVX%3Aa9685288
https://818ps.com/muban/oubosiwangVXa9685288_1.html
https://818ps.com/muban/oubosiwanghezuoVXa9685288_1.html
https://818ps.com/muban/oubosiwangbaoshaVXa9685288_1.html
https://818ps.com/muban/oubosiwangcaokongVXa9685288_1.html
https://818ps.com/muban/oubojiawangVXa9685288_1.html
https://818ps.com/muban/oubojiawanghezuoVXa9685288_1.html
https://818ps.com/muban/oubojiawangbaoshaVXa9685288_1.html
https://818ps.com/muban/oubojiawangyibiyiVXa9685288_1.html
https://818ps.com/muban/oubobaoshawangVXa9685288_1.html
https://818ps.com/muban/oubobaoshamaifenVXa9685288_1.html
https://818ps.com/muban/oubobaoshawanghezuoVXa9685288_1.html
https://818ps.com/muban/oubo1bi1VXa9685288_1.html
https://818ps.com/muban/ouboyibiyiVXa9685288_1.html
https://818ps.com/muban/oubo1bi1siwangVXa9685288_1.html
https://818ps.com/muban/oubo1bi1jiawangVXa9685288_1.html
https://818ps.com/muban/ouboyibiyihezuoVXa9685288_1.html
https://818ps.com/muban/yaxingsiwangVXa9685288_1.html
https://818ps.com/muban/yaxingsiwanghezuoVXa9685288_1.html
https://818ps.com/muban/yaxingsiwangbaoshaVXa9685288_1.html
https://818ps.com/muban/yaxingsiwangcaokongVXa9685288_1.html
https://818ps.com/muban/yaxingjiawangVXa9685288_1.html
https://818ps.com/muban/yaxingjiawanghezuoVXa9685288_1.html
https://818ps.com/muban/yaxingjiawangbaoshaVXa9685288_1.html
https://818ps.com/muban/yaxingjiawangyibiyiVXa9685288_1.html
https://818ps.com/muban/yaxingbaoshawangVXa9685288_1.html
https://818ps.com/muban/yaxingbaoshamaifenVXa9685288_1.html
https://818ps.com/muban/yaxingbaoshawanghezuoVXa9685288_1.html
https://818ps.com/muban/yaxing1bi1VXa9685288_1.html
https://818ps.com/muban/yaxingyibiyiVXa9685288_1.html
https://818ps.com/muban/yaxing1bi1siwangVXa9685288_1.html
https://818ps.com/muban/yaxing1bi1jiawangVXa9685288_1.html
https://818ps.com/muban/yaxingyibiyihezuoVXa9685288_1.html
https://818ps.com/muban/huanqiu360siwangVXa9685288_1.html
https://818ps.com/muban/huanqiu360siwanghezuoVXa9685288_1.html
https://818ps.com/muban/huanqiu360siwangbaoshaVXa9685288_1.html
https://818ps.com/muban/huanqiu360siwangcaokongVXa9685288_1.html
https://818ps.com/muban/huanqiu360jiawangVXa9685288_1.html
https://818ps.com/muban/huanqiu360jiawanghezuoVXa9685288_1.html
https://818ps.com/muban/huanqiu360jiawangbaoshaVXa9685288_1.html
https://818ps.com/muban/huanqiu360jiawangyibiyiVXa9685288_1.html
https://818ps.com/muban/huanqiu360baoshawangVXa9685288_1.html
https://818ps.com/muban/huanqiu360baoshamaifenVXa9685288_1.html
https://818ps.com/muban/huanqiu360baoshawanghezuoVXa9685288_1.html
https://818ps.com/muban/huanqiu3601bi1VXa9685288_1.html
https://818ps.com/muban/huanqiu360yibiyiVXa9685288_1.html
https://818ps.com/muban/huanqiu3601bi1siwangVXa9685288_1.html
https://818ps.com/muban/huanqiu3601bi1jiawangVXa9685288_1.html
https://818ps.com/muban/huanqiu360yibiyihezuoVXa9685288_1.html
https://www.5118.com/keyword/110353l13l13l03l13l73l83l33l23l33l13l010315f71c97a53572b6/qs
https://www.5118.com/keyword/110353l13l13l03l13l73l83l33l23l33l13l010315f77405a53572b6/qs
https://www.5118.com/keyword/110353l13l13l03l13l73l83l33l23l33l13l010315f77405f166a9e4/qs
https://www.5118.com/keyword/110353l13l13l03l13l73l83l33l23l33l13l010315f71c9703l63l33l3047fa37/qs
https://www.5118.com/keyword/110353l13l13l03l13l73l83l33l23l33l13l010315f7740503l63l33l3047fa37/qs
https://www.clzg.cn/user/795764.html
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70040412/viewspace-3051217/ ,如需转载,请注明出处,否则将追究法律责任。