Java线程池有哪些参数?阻塞队列有几种?拒绝策略有几种?新线程添加的流程?
发表于|更新于|技术博客
|总字数:585|阅读时长:1分钟|浏览量:
参考博客:Java线程池七个参数详解
Java线程池参数
1. corePoolSize 线程池核心线程大小
2. maximumPoolSize 线程池最大线程数量
3. keepAliveTime 空闲线程存活时间
4. unit 空闲线程存活时间单位
5. workQueue 工作队列
- ArrayBlockingQueue
基于数组的有界阻塞队列,按FIFO排序。新任务进来后,会放到该队列的队尾,有界的数组可以防止资源耗尽问题。当线程池中线程数量达到corePoolSize后,再有新任务进来,则会将任务放入该队列的队尾,等待被调度。如果队列已经是满的,则创建一个新线程,如果线程数量已经达到maxPoolSize,则会执行拒绝策略。
- LinkedBlockingQuene
基于链表的无界阻塞队列(其实最大容量为Interger.MAX),按照FIFO排序。由于该队列的近似无界性,当线程池中线程数量达到corePoolSize后,再有新任务进来,会一直存入该队列,而基本不会去创建新线程直到maxPoolSize(很难达到Interger.MAX这个数),因此使用该工作队列时,参数maxPoolSize其实是不起作用的。
- SynchronousQuene
一个不缓存任务的阻塞队列,生产者放入一个任务必须等到消费者取出这个任务。也就是说新任务进来时,不会缓存,而是直接被调度执行该任务,如果没有可用线程,则创建新线程,如果线程数量达到maxPoolSize,则执行拒绝策略。
4. PriorityBlockingQueue
具有优先级的无界阻塞队列,优先级通过参数Comparator实现。
6. threadFactory 线程工厂
7. handler 拒绝策略
- CallerRunsPolicy
在调用者线程中直接执行被拒绝任务的run方法,除非线程池已经shutdown,则直接抛弃任务。
- AbortPolicy
直接丢弃任务,并抛出RejectedExecutionException异常。
- DiscardPolicy
直接丢弃任务,什么都不做。
- DiscardOldestPolicy
抛弃进入队列最早的那个任务,然后尝试把这次拒绝的任务放入队列
阻塞队列一共有7种
参考博客: 线程池中7种阻塞队列的介绍、区别与选择
拒绝策略有4种
新线程添加的流程?
参考博客:关于线程池的工作队列及新线程的流程顺序
文章作者: MUMU
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 blog.wo0ow.com!