Java线程池总结

java中多数利用Executors创建不同的线程池满足不同场景的需求

  • newFixedThreadPool(int nThreads) 指定工作线程数量的线程池
  • newCachedThreadPool() 处理大量短时间工作任务的线程池
    • 试图缓存线程并重用,当无缓存线程可用时,就会创建新的工作线程
    • 如果闲置的线程超过阈值,一般为60s,则会被终止并移除缓存
    • 系统长时间闲置的时候,不会消耗什么资源
  • newSingleThreadExecutor() 创建唯一的工作线程来执行任务,若异常退出,则会有另一个线程取代它
  • newSingleThreadScheduledExecutor()与newScheduledThreadPool(int corePoolSize)定时或者周期性的工作调度,俩者的区别在于单一工作线程或者多线程执行
  • newWorkStealingPool() 内部构建ForkJoinPool,利用working-stealing算法,并行的处理任务,不保证处理顺序

Fork/Join框架

其原理是将大任务分割成若干小任务并行执行,最终汇总每个小任务执行结果后得到大任务结果的框架

Work-Stealing算法:某个线程从其他队列里窃取任务来执行,一般使用双端队列,窃取任务的时候从队列尾部进行执行

为什么引入线程池?

  • 降低资源损耗
  • 提高线程的可管理性
  • 实现线程复用
    在这里插入图片描述
    创建以上5种不同线程池的底层都是new的ThreadPoolExecutor

java线程池的工作流程

在这里插入图片描述

线程池的状态

  • RUNNING:能接受新的任务,并处理阻塞队列中的任务
  • SHUTDOWN:不再接收新提交任务,可以处理存量任务
  • STOP:不再接收新提交任务,也不处理存量任务
  • TIDYING:所有任务都终止
  • TERMINATED:terminated()方法执行后到该状态

线程池数目的设置规则

在这里插入图片描述

线程池Submit与execute的区别

  • submit方法可以获得线程返回值
  • excute方法会抛出异常。sumbit方法不会抛出异常。除非你调用Future.get()。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值