写于:2020-04-01
一、代码结构
二、类结构
线程池实现类简图

自定义线程池实现 BasicThreadPool 实现了线程池接口规范定义 ThreadPool 和继承了 Thread
继承 Thread
继承 Thread 线程池本省也是一个线程,可以在 run 方法中进行,线程扩容和回收操作
实现 ThreadPool 规范
提供统一的接口访问API。
三、相关代码
线程池存放任务的队列

1、队列需要容器存放任务
/** 存放人物的队列 **/private final LinkedList<Runnable> runnableLinkedList = new LinkedList<>();
2、队列需要有上限
/** 任务队列最大容量,构造式传入 **/private final int limit;
3、队列达到上限,需要有拒绝策略
/** 任务队列达到最大容量时,拒绝策略 **/private final DenyPolicy denyPolicy;
4、队列需要有,存取的操作
// 存@Overridepublic void offer(Runnable runnable) {synchronized (runnableLinkedList){if(runnableLinkedList.size() >= limit){// 任务队列满,执行拒绝策略denyPolicy.reject(runnable,threadPool);}else{// 任务队列未满,将任务加入队列最末尾处,并唤醒阻塞任务runnableLinkedList.addLast(runnable);runnableLinkedList.notifyAll();}}}// 取@Overridepublic Runnable take() throws InterruptedException{synchronized(runnableLinkedList){while (runnableLinkedList.isEmpty()){try {// 如果任务队列没有可执行任务,当前线程挂起,进入 runnableLinkedList 关联的 monitor waitset 中// 等待被唤醒runnableLinkedList.wait();} catch (InterruptedException e) {// 被中断时,抛出异常throw e;}}// 从任务队列头部移除一个任务return runnableLinkedList.removeFirst();}}
