Java线程池
来源:互联网 发布:2017程序员就业形势 编辑:程序博客网 时间:2024/06/04 20:00
ThreadPoolExecutor
原始的,配置可能最多的线程池。如果正在运行的线程等于corePoolSize时,ThreadPoolExecutor优先往队列中添加任务,直到队列满了,并且没有空闲线程时才创建新的线程
可调整参数:corePoolSize保证存在的线程数量,maximumPoolSize最大池中线程数量,keepAliveTime & unit线程存活时间及单位,当线程数量超过最大数量时,超过存活时间的线程将被终止。
实现:
新任务到来时,
1)当前线程数小于corePoolSize时,直接新建线程执行。如果失败,进入3
2)大于等于corePoolSize时,如果能放入队列,则放入队列中,如果队列已满,进入3
3)当前线程数小于maximumPoolSize时,创建一个新的线程
newCachedThreadPool
根据需要动态新增线程,如果已存在可用的线程,则重复使用之。超过60秒未使用的线程将被终止移除
应用场景:并发执行大量短存活周期的异步任务。
实现:corePoolSize=0,maximunPoolSize=Integer.MAX_VALUE,超时时间60秒,同步队列(synchronousQueue)
newFixedThreadPool
固定数量线程,共享无界队列。如果一个线程异常退出,将新建一个线程执行后续任务。除非显式关闭(call shutdown),否则线程会一直存在。
应用场景:稳定数量的长存货周期任务。
可调整参数:线程数量
实现:corePoolSize=maximumPoolSize,没有超时时间,链式阻塞队列。
newSingleThreadExecutor
单个线程,无界队列。线程异常退出时将新建线程继续执行任务。该执行器不能重新配置以支持多个线程。不保证线程的执行顺序
应用场景:会产生子任务的异步任务(不能同步,因为不保证执行顺序)
实现:corePoolSize=maximumPoolSize=1,其他等同于newFixedThreadPool
newWorkStealingPool
创建和当前机器可用处理器个数等量的线程数。实际运行的线程数会动态变化。
可调整参数:并发数。不设置即默认当前机器可用处理器个数。
实现:ForkJoinPool
0 0
- Java线程:线程池
- java--线程--线程池
- Java线程(六):线程池
- Java线程(五):线程池
- Java线程(五):线程池
- Java线程_07_线程池
- Java线程(五):线程池
- Java线程(六):线程池
- Java线程(五):线程池
- Java线程(六):线程池
- Java线程(六):线程池
- Java线程(六):线程池
- Java线程(六):线程池
- Java线程(六):线程池
- Java线程(六):线程池
- Java线程(六):线程池
- Java线程(五):线程池
- Java线程(六):线程池
- 局域网中远程重启服务器的安全方法
- 经验总结24--捕捉异常的重要性
- 数据库为什么要分库分表
- Hadoop里的Partitioner
- Android 下载APK 安装APK 打开APK
- Java线程池
- 输入详细异常信息到log文件里面
- 一个网站的诞生02--用Scrapy抓取数据
- [水]ZOJ1152 HDOJ1017
- JAVA图形类问题:ImageIcon和Image类区别
- 队列(二)——队列的链表实现方式
- 生物医学SCI论文投稿技巧
- VS2008調用時,出現「無法連接到 ASP.NET程式開發伺服器」或「webdev.webserver.exe」錯誤
- HDU_4506 小明系列故事——师兄帮帮忙