谢谢邀请!下面介绍一下线程池是怎样工作的?
ThreadPoolExecutor 的类关系如下:
文章插图
Executor是一个接口,它是Executor框架的基础,它将任务的提交与任务的执行分离开来 。
ExecutorService接口继承了Executor,在其上做了一些shutdown、submit的扩展,可以说是真正的线程池接口;
AbstractExecutorService抽象类实现了ExecutorService接口中的大部分方法;
threadPoolExecutor是线程池的核心实现类,用来执行被提交的任务 。
ScheduledExecutorService接口继承了ExecutorService接口,提供了带"周期执行"功能ExecutorService;
ScheduledThreadPoolExecutor是一个实现类,可以在给定的延迟后运行命令,或者定期执行命令 。ScheduledThreadPoolExecutor比Timer更灵活,功能更强大 。
定义线程池
文章插图
线程池的创建各个参数含义 及流程 如下:
1、corePoolSize
① 线程池中的核心线程数,当提交一个任务时,线程池创建一个新线程执行任务,直到当前线程数等于corePoolSize;
② 如果当前线程数为corePoolSize,继续提交的任务被保存到阻塞队列中,等待被执行;
③ 如果执行了线程池的prestartAllCoreThreads方法,线程池会提前创建并启动所有核心线程 。
2、maximumPoolSize
线程池中允许的最大线程数 。如果当前阻塞队列满了,且继续提交任务,
则创建新的线程执行任务,前提是当前线程数小于maximumPoolSize
3、keepAliveTime
线程空闲的存活时间,即当线程没有任务执行时,继续存活的时间 。
默认情况下,该参数只在线程数大于 corePoolSize时才有用 。
4、TimeUnit
keepAliveTime 的时间单位 。
5、WorkQueue
用于保存等待执行的任务的阻塞队列,一般来说,我们应该尽量使用有界队列,因为使用无界队列作为工作队列会对线程池做如下影响 。
① 当线程池中的线程数达到corePoolSize后,新任务将在无界队列中等待,因此线程池中的线程数不会超过corePoolSize 。
② 由于1,使用无界队列时maximumPoolSize将是一个无效参数 。
③ 由于1和2,使用无界队列时keepAliveTime将是一个无效参数 。
④ 更重要的,使用无界queue可能会耗尽系统资源,有界队列则有助于防止资源耗尽,同时即使使用有界队列,也要尽量控制队列的大小在一个合适的范围 。
所以我们一般会使用,ArrayBlockingQueue、LinkedBlockingQueue、SynchronousQueue、PriorityBlockingQueue 。
6、threadfactory
创建线程的工厂,通过自定义的线程工厂可以给每个新建的线程设置一个具有识别度的线程名,
当然还可以更加自由的对线程做更多的设置,比如设置所有的线程为守护线程 。
Executors 静态工厂里默认的threadfactory,线程的命令 规则时"pool-数字-thread-数字"
7、RejectedExecutionHandler 拒绝策略
线程池的饱和策略,当阻塞队列满了,且没有空闲的工作线程,如果继续提交任务,必须采取一种策略处理该任务,线程池提供了4种策略:
【JAVA架构之线程池是怎样工作的?】① AbortPolicy : 直接抛出异常,默认策略
② CallerRunsPolicy:用调用者所在的线程来执行任务
③ DiscardOldestPolicy : 丢弃阻塞队列中靠最前的任务,并执行当前任务
④ Discardpolicy : 直接丢弃任务
当然也可以根据应用场景实现RejectedExecutionHandler接口,自定义饱和策略,如记录日志或持久化存储不能处理的任务 。
线程池的工作机制
以上关于本文的内容,仅作参考!温馨提示:如遇专业性较强的问题(如:疾病、健康、理财等),还请咨询专业人士给予相关指导!
「辽宁龙网」www.liaoninglong.com小编还为您精选了以下内容,希望对您有所帮助:- 男女之间有纯友谊吗
- 祝你好运大全之梦见桥梁是什么意思?梦见桥代表什么
- 针对猩红之月,你有什么话想对腾讯说?
- 授之以鱼不如授之以渔的教育学意义
- 玄幻复仇加修仙搞笑,新韩剧《还魂》开播,第1集最后有点睛之妙
- 十二星座3月运势与血型之风象星座篇结合血型分析星座运程,不容错过哦~
- 夏仲奇盲派命理知识命理学之精要尽在盲派手中!
- 《不惑之旅》简单最后怎么样了 不惑之旅演员表都有谁
- 女生如何处理好闺蜜与男友之间的关系
- 执子之手与子偕老是什么意思