学习路线指引(点击解锁) | 知识定位 | 人群定位 |
---|---|---|
🧡 Python实战微信订餐小程序 🧡 | 进阶级 | 本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。 |
💛Python量化交易实战💛 | 入门级 | 手把手带你打造一个易扩展、更安全、效率更高的量化交易系统 |
在前面的文章自己动手写乞丐版线程池中,我们写了一个非常简单的线程池实现,这个只是一个非常简单的实现,在本篇文章当中我们将要实现一个和JDK内部实现的线程池非常相似的线程池。
我们首先看一个JDK给我们提供的线程池ThreadPoolExecutor
的构造函数的参数:
| | public ThreadPoolExecutor(int corePoolSize, |
| | int maximumPoolSize, |
| | long keepAliveTime, |
| | TimeUnit unit, |
| | BlockingQueue workQueue, |
| | ThreadFactory threadFactory, |
| | RejectedExecutionHandler handler) |
参数解释:
如果上面的参数你不能够理解,可以先阅读这篇文章自己动手写乞丐版线程池。基于上面谈到的参数,线程池当中提交任务的流程大致如下图所示:
根据前面的参数分析我们自己实现的线程池需要实现一下功能:
| | private AtomicInteger ct = new AtomicInteger(0); // 当前在执行任务的线程个数 |
| | private int corePoolSize; |
| | private int maximumPoolSize; |
| | private long keepAliveTime; |
| | private TimeUnit unit; |
| | private BlockingQueue taskQueue; |
| | private RejectPolicy policy; |
| | |
| | private ArrayList workers = new ArrayList<>(); |
| | |
| | private volatile boolean isStopped; |
| | private boolean useTimed; |
| | |
参数解释如下:
| | public enum RejectPolicy { |
| | |
| | ABORT, |
| | CALLER\_RUN, |
| | DISCARD\_OLDEST,