Executor是一个顶层接口,在它里面只声明了一个方法execute(Runnable),返回值为void,参数为Runnable类型,

从字面意思可以理解,就是用来执行传进去的任务的;

然后ExecutorService接口继承了Executor接口,并声明了一些方法:submit、invokeAll、invokeAny以及shutDown等;

抽象类AbstractExecutorService实现了ExecutorService接口,基本实现了ExecutorService中声明的所有方法;

然后ThreadPoolExecutor继承了类AbstractExecutorService。

Executors这个工具类中提供了如下静态方法:

  • Executors.newCachedThreadPool() 无限大小的线程池,线程会自动重用
  • Executors.newFixedThreadPool(int) 固定线程数的线程池
  • Executors.newSingleThreadExecutor() 单线程执行器

按照Executors类中的几个工厂方法,分别使用的是:

  • LinkedBlockingQueue。FixedThreadPool和SingleThreadExecutor使用的是这个BlockingQueue,队列长度是无界的,适合用于提交任务相互独立无依赖的场景。
  • SynchronousQueue。  CachedThreadPool使用的是这个BlockingQueue,通常要求线程池不设定最大的线程数,以保证提交的任务有机会执行而不被丢掉。通常这个适合任务间有依赖的场景。

当然,开发者也可以定制ThreadPoolExecutor时使用ArrayBlockingQueue有界队列

转载于:https://www.cnblogs.com/lnas01/p/5358231.html

java线程池【转】相关推荐

  1. 四种Java线程池用法解析

    四种Java线程池用法解析 本文为大家分析四种Java线程池用法,供大家参考,具体内容如下 http://www.jb51.net/article/81843.htm 1.new Thread的弊端 ...

  2. 面试必问---Java线程池8大拒绝策略

    前言 谈到java的线程池最熟悉的莫过于ExecutorService接口了,jdk1.5新增的java.util.concurrent包下的这个api,大大的简化了多线程代码的开发.而不论你用Fix ...

  3. Java线程池使用与原理

    线程池是什么? 我们可以利用java很容易创建一个新线程,同时操作系统创建一个线程也是一笔不小的开销.所以基于线程的复用,就提出了线程池的概念,我们使用线程池创建出若干个线程,执行完一个任务后,该线程 ...

  4. Java线程池实现原理及其在美团业务中的实践

    来自:美团技术团队 随着计算机行业的飞速发展,摩尔定律逐渐失效,多核CPU成为主流.使用多线程并行计算逐渐成为开发人员提升服务器性能的基本武器.J.U.C提供的线程池ThreadPoolExecuto ...

  5. Java线程池详解学习:ThreadPoolExecutor

    Java线程池详解学习:ThreadPoolExecutor Java的源码下载参考这篇文章:Java源码下载和阅读(JDK1.8) - zhangpeterx的博客 在源码的目录java/util/ ...

  6. Java 线程池详解学习:FixedThreadPool,CachedThreadPool,ScheduledThreadPool...

    Java常用的线程池有FixedThreadPool和CachedThreadPool,我们可以通过查看他们的源码来进行学习. Java的源码下载参考这篇文章:Java源码下载和阅读(JDK1.8) ...

  7. JAVA线程池ThreadPoolExecutor与阻塞队列BlockingQueue .

    2019独角兽企业重金招聘Python工程师标准>>> 从Java5开始,Java提供了自己的线程池.每次只执行指定数量的线程,java.util.concurrent.Thread ...

  8. Java线程池了解一下

    前言 马上就要过年了,还在岗位上坚守"swimming"的小伙伴们顶住.博主给大家带来一篇线程池的基本使用解解闷. 为什么需要使用线程池 1.减少线程创建与切换的开销 在没有使用线 ...

  9. java线程池拒绝策略_Java核心知识 多线程并发 线程池原理(二十三)

    线程池做的工作主要是控制运行的线程的数量,处理过程中将任务放入队列,然后在线程创建后 启动这些任务,如果线程数量超过了最大数量超出数量的线程排队等候,等其它线程执行完毕, 再从队列中取出任务来执行.他 ...

  10. Java 线程池必知的8 大拒绝策略

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | kailing.pub/article/ind ...

最新文章

  1. 我靠这份无人机完全指南吹了一整年牛!
  2. 继承性和层叠性 权重 盒模型 padding(内边距) border(边框) margin 标准文档流 块级元素和行内元素...
  3. Character.isLetterOrDigit(ch)判断ch是否为字母或数字
  4. uva 1610——Party Games
  5. live555 rtsp直播卡顿马赛克优化
  6. python内置函数type_Python基于内置函数type创建新类型
  7. pdf复制到word有空格间隙和换行问题解决办法
  8. 小米笔记本 java_分享下我的小米笔记本pro安装黑苹果(Mojavae)的经历
  9. 在黑客攻击之前软件安全检测是重点,软件安全检测机构怎么找?
  10. Excel学习笔记:P18-COUNTIFS函数与SUMIFS函数
  11. 蓝牙(四)LMP协议解析之二
  12. Golang 基础:原生并发 goroutine channel 和 select 常见使用场景
  13. 可以批量制作吊牌标签上的条码标签打印软件
  14. Cadence Allegro修改Waived DRC标识颜色图文教程及视频演示
  15. 什么牌子的护眼灯最好推荐?盘点口碑好的护眼灯品牌
  16. 解答:为什么要搭建企业论坛?如何快速搭建?
  17. dns缓存、cnd缓存、浏览器缓存
  18. Unity WebGL 下载替换Word模板数据
  19. 无效的源发行版,解决方案
  20. html5 video/audio 监听事件属性及方法

热门文章

  1. 企业网络推广——企业网络推广中如何解决网站排名提升难题?
  2. 网站优化与网站权重息息相关
  3. 百度蜘蛛动态网页ajax,百度SEO优化百度蜘蛛可读内容
  4. 双系统grub启动linux,双系统ubuntu与Centos的grub启动(解决VFS报错)
  5. docker klee tutorial_在容器中安装新的程序
  6. 世界盒子怎么调中文_正版游戏平台知识小科普:epic游戏怎么调中文?
  7. mac brew 安装
  8. tensorfllow MNIST机器学习入门
  9. Cuckoo hash算法分析——其根本思想和bloom filter一致 增加hash函数来解决碰撞 节省了空间但代价是查找次数增加...
  10. Dynamo分布式系统——「RWN」协议解决多备份数据如何读写来保证数据一致性,而「向量时钟」来保证当读取到多个备份数据的时候,如何判断哪些数据是最新的这种情况...