【Java】实现一个简单的线程池
下面是一个简单的Java线程池实现示例。这个线程池支持固定大小的线程,并使用队列存储待执行的任务。
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
public class SimpleThreadPool implements Runnable {
private final BlockingQueue<Runnable> taskQueue;
private final int threadPoolSize;
private final Thread[] threads;
public SimpleThreadPool(int threadPoolSize) {
this.threadPoolSize = threadPoolSize;
this.taskQueue = new LinkedBlockingQueue<>();
this.threads = new Thread[threadPoolSize];
for (int i = 0; i < threadPoolSize; i++) {
threads[i] = new Thread(this);
threads[i].start();
}
}
public void execute(Runnable task) {
try {
taskQueue.put(task);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
@Override
public void run() {
while (true) {
try {
Runnable task = taskQueue.take();
task.run();
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
break;
}
}
}
// 测试线程池
public static void main(String[] args) {
SimpleThreadPool threadPool = new SimpleThreadPool(5);
for (int i = 0; i < 10; i++) {
threadPool.execute(() -> {
System.out.println("Task executed on thread: " + Thread.currentThread().getName());
});
}
}
}
这个线程池的实现中,我们定义了一个固定大小的threads
数组来保存工作线程,使用LinkedBlockingQueue
作为任务队列。execute
方法用于向任务队列中添加任务,而run
方法是线程的执行体,它从任务队列中取出任务并执行。
在main
方法中,我们创建了一个线程池并提交了10个简单的任务。每个任务只是简单地打印出当前执行任务的线程名。这个示例展示了如何使用线程池来管理并发任务的执行。
评论已关闭