概述
目录
什么是线程池:
线程池所涉及到的类:
线程池的参数:
corePoolSize:
maximumPoolSize:
keepAliveTime、TimeUnit:
BlockingQueue:
ThreadFactory:
RejectedExecutionHandler:
什么是线程池:
线程池是一种技术,使用线程池来管理维护线程,比手动创建更加安全,快捷,因为线程是一种稀
缺资源,无限制的过度创建,可能会威胁到系统的稳定性,同时线程的创建和销毁都会付出额外的
性能消耗,而线程池就像一个蓄水的池子,将线程都存放在里面,到需要的时候,可以直接去使
用。
线程池所涉及到的类:
在Java
标准库提供了如下几个类或接口,来操作并使用线程
ExecutorService
接口:来进行管理操作线程池;Executors
类:用于创建线程池的工具类;ThreadPoolExecutor
及其子类:线程池;public class Pools { public static void main(String[] args) { // 根据任务调整线程的线程池 ExecutorService pool1 = Executors.newCachedThreadPool(); // 线程数固定的线程池 ExecutorService pool2 = Executors.newFixedThreadPool(5); // 单线程的线程池 ExecutorService pool3 = Executors.newSingleThreadExecutor(); // 延迟执行的线程池 ExecutorService pool4 = Executors.newScheduledThreadPool(2); } }
通过各个线程池的源码查看,他们获得或少都有着相同的参数
线程池的参数:
线程池的参数可分为:corePoolSize、maximumPoolSize、keepAliveTime、TimeUnit、
BlockingQueue、ThreadFactory 、RejectedExecutionHandler
corePoolSize:核心线程数
核心线程数,也就是线程池中最小维护的线程池。
在 newFixedThreadPool 线程池中,核心线程是与最大线程数相同的,
在newCachedThreadPool 线程池中,核心线程数为0,
在newSingleThreadExecutor 线程中核心线程数为1,
在newScheduledThreadPool线程池中,核心线程数与传入的参数相同。
maximumPoolSize:最大线程数
最大线程数,就是线程池中,最多可以维护的线程数。
在 newFixedThreadPool 线程池中,核心线程是与最大线程数相同的,都等于传入的参数
在newCachedThreadPool 线程池中,最大线程数等于Integer.MAX_VALUE,即 1247483647
在newSingleThreadExecutor 线程中,最大线程数等于1,
在newScheduledThreadPool线程池中,最大线程数与传入的参数相同。
keepAliveTime、TimeUnit:非核心线程最多可以存活的时间
在 newFixedThreadPool 线程池中,非核心线程可以存活时间为:0
在newCachedThreadPool 线程池中,非核心线程可以存活时间为:60 秒
在newSingleThreadExecutor 线程中,非核心线程可以存活时间为:0
在newScheduledThreadPool线程池中,非核心线程可以存活时间为:0
BlockingQueue:工作队列
工作队列,或者说是等待队列,用来储存等待中的任务。
常见的等待队列有 :
- ArrayBlockingQueue 固定长度,基于数组实现的队列
- LinkedBlockingQueue 是一个无界的,基于链表实现的队列
- DelayedWorkQueue 是基于堆结构的延迟队列,基于数组实现,初始容量为 16
- PriorityBlockingQueue 优先级队列,是无界的队列
- SynchronousQueue同步队列,不存储元素的工作队列。
在 newFixedThreadPool 线程池中,工作队列为:LinkedBlockingQueue
在 newCachedThreadPool 线程池中,工作队列为:SynchronousQueue
在 newSingleThreadExecutor 线程中,工作队列为:LinkedBlockingQueue
在 newScheduledThreadPool线程池中,工作队列为:DelayedWorkQueue
ThreadFactory:线程工厂
线程工厂,创建和销毁线程,以及设置线程的名称
RejectedExecutionHandler:拒绝策略
常见的拒绝策略有:
- AbortPolicy 默认拒绝策略,丢弃任务并抛出 RejectedExecutionException
- DiscardPolicy :丢弃任务但是不抛出异常
- DiscardOidestPolicy : 丢弃最旧的的任务,即最早进入队列的任务
- CallerRunsPolicy :交给调用线程池的线程处理
在 newFixedThreadPool 线程池中,拒绝策略为:AbortPolicy
在 newCachedThreadPool 线程池中,拒绝策略为:AbortPolicy
在 newSingleThreadExecutor 线程中,拒绝策略为:AbortPolicy
在 newScheduledThreadPool线程池中,拒绝策略为:AbortPolicy
最后
以上就是幸福刺猬为你收集整理的对线程池的理解什么是线程池:线程池的参数:BlockingQueue:工作队列的全部内容,希望文章能够帮你解决对线程池的理解什么是线程池:线程池的参数:BlockingQueue:工作队列所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复