import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;/*** 简化的线程池,仅用来说明工作原理.<br>* @author gongqiang <br>* @version 1.0.0 2021年6月9日<br>* @see * @since JDK 1.5.0*/
public class MyThreadPool {// 利用阻塞队列实现生产者 - 消费者模式private BlockingQueue<Runnable> workQueue;// 保存内部工作线程private List<WorkerThread> threads = new ArrayList<>();// 构造方法public MyThreadPool(int poolSize, BlockingQueue<Runnable> workQueue){this.workQueue = workQueue;// 创建工作线程for(int idx=0; idx<poolSize; idx++){WorkerThread work = new WorkerThread();work.start();threads.add(work);}}// 提交任务void execute(Runnable command){try {workQueue.put(command);} catch (InterruptedException e) {Thread.currentThread().interrupt();}}// 工作线程负责消费任务,并执行任务class WorkerThread extends Thread{public void run() {// 循环取任务并执行while(true){ try {Runnable task = workQueue.take();task.run();} catch (InterruptedException e) {Thread.currentThread().interrupt();}}}}/*** 示例.* @param args*/public static void main(String[] args) {// 创建有界阻塞队列final BlockingQueue<Runnable> workQueue = new LinkedBlockingQueue<>(2);// 创建线程池MyThreadPool pool = new MyThreadPool(10, workQueue);// 提交任务pool.execute(()->{System.out.println("hello");});}
}