本文主要是介绍线程池,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
- 线程池:
(1) 线程池的返回值ExecutorService简介:
ExecutorService是Java提供的用于管理线程池的接口。该接口的两个作用:控制线程数量和重用线程
(2)4中常用线程池
- Executors.newCacheThreadPool():可缓存线程池,先查看池中有没有以前建立的线程,如果有,就直接使用。如果没有,就建一个新的线程加入池中,缓存型池子通常用于执行一些生存期很短的异步型任务
- Executors.newFixedThreadPool(int n):创建一个可重用固定个数的线程池,以共享的无界队列方式来运行这些线程。
- Executors.newScheduledThreadPool(int n):创建一个定长线程池,支持定时及周期性任务执行
- Executors.newSingleThreadExecutor():创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。
ThreadPoolExecutor为例:
继承体系:
构造方法:
corePoolSize: 线程池核心线程数
maximumPoolSize:线程池最大数
keepAliveTime: 空闲线程存活时间
unit: 时间单位
workQueue: 线程池所使用的缓冲队列
threadFactory:线程池创建线程使用的工厂
handler: 线程池对拒绝任务的处理策略
线程池运行过程:
- 构建线程池时初始线程池中的线程数是0
- 两个任务->创建两个核心线程
- 第三个任务->添加到任务队列
- 一直到任务队列满了为止 ->下一个任务线程池开始创建临时线程处理
- 如果任务队列满了并且达到了最大线程数->下一个到来的任务,线程池启用
拒绝机制。
默认的拒绝策略为抛异常
线程池的五种状态:
- 线程池调用了shutdown()方法:
线程池不再接受任务,任务队列中还存在的任务会继续执行完。
- 调用shutdownNow()方法:
线程不在执行当前的任务
- 当线程都停下来后进入tidying状态
- 执行terminated方法 terminated方法系统没有实现,需要自己实现。
- Terminated状态
这篇关于线程池的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!