下边就是我手写的线程池,注释非常清楚。可以自己跑一下试试。线程池设计模式:生产者-消费者模式,中间用队列连接 import java.util.LinkedList; import java.util.List; import java.util.concurrent.BlockingDeque; import java.util.concurrent.LinkedBlockingDeque; public class JxdExecutorService { /** * 一直处于工作的线程数 */ private List<Thread> workThreads; /** * 执行我们的任务队列容器 * * SynchronousQueue、LinkedBlockingQueue 和ArrayBlockingQueue * 注意下这三种的区别 * new ThreadPoolExecutor 可以选择不同的三种队列存放方式 * SynchronousQueue 没有容量 不存储缓冲队列,执行完一个走一个必须等队列中的添加元素被消费后才能继续添加新的元素 * LinkedBlockingQueue 无界缓存等待队列 剩余的元素会在阻塞队列里等待 但是可以人为指定队列大小 * * ArrayBlockingQueue是一个有界缓存等待队列,可以指定缓存队列的大小, * 当正在执行的线程数等于corePoolSize时,多余的元素缓存在ArrayBlockingQueue队列中等待有空闲的线程时继续执行, * 当ArrayBlockingQueue已满时,加入ArrayBlockingQueue失败, * 会开启新的线程去执行,当线程数已经达到最大的maximumPoolSizes时,再有新的元素尝试加入ArrayBlockingQueue时会报错 */ p
手写简单的线程池Demo
最新推荐文章于 2024-08-29 13:08:20 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)