下面是一个简单的Java线程池的实现,它包括了任务队列、工作线程和线程池管理器。这个线程池可以执行传入的Runnable任务,并限制同时执行的线程数量。
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
public class CustomThreadPool {
private final int poolSize;
private final WorkerThread[] workers;
private final BlockingQueue<Runnable> taskQueue;
public CustomThreadPool(int poolSize) {
this.poolSize = poolSize;
taskQueue = new LinkedBlockingQueue<>();
workers = new WorkerThread[poolSize];
// 初始化并启动工作线程
for (int i = 0; i < poolSize; i++) {
workers[i] = new WorkerThread();
workers[i].start();
}
}
public void execute(Runnable task) {
try {
// 将任务加入队列
taskQueue.put(task);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
private class WorkerThread extends Thread {
@Override
public void run() {
while (true) {
try {
// 从队列中取出任务并执行
Runnable task = taskQueue.take();
task.run();
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}
}
}
这个简单的线程池有几个关键部分:
● CustomThreadPool类:线程池的主要类,包含了线程池的初始化和任务执行方法。
● WorkerThread内部类:工作线程类,负责从任务队列中取出任务并执行。
● taskQueue:任务队列,使用LinkedBlockingQueue实现,用于存放待执行的任务。
● execute(Runnable task)方法:用于向线程池提交任务,将任务加入到任务队列中。
● 在构造方法中,初始化了指定数量的工作线程,并启动它们,使它们可以不断地从任务队列中取出任务执行。