概述
实现对线程复用的技术,不用多次创建线程
获得线程池对象
1.使用ExecutorService
的实现类ThreadPoolExecutor
自创建一个线程对象。
2.使用Executors
(线程池的工具类)调用方法返回不同特点的线程池对象
ThreadPoolExcutor构造器的参数
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler)
- corePoolSize:指定线程池的核心线程数量
- maximumPoolSize:指定线程池可支持的最大线程数
- keepAliveTime:指定临时线程的最大存活时间
- unit:指定存活时间的单位(秒,分,时,天)
- workQueue:指定任务队列
- threadFactory:指定用哪个线程工厂创建线程
- handler:当线程全部激活,且任务队列已满,对于新任务的处理方式
向线程池添加任务
1.Runnable接口
使用excute方法提交实例化的实现类
2.Callable接口
使用submit方法提交经过Futur处理过的实现类
新任务拒绝策略
策略 | 详解 |
---|---|
ThreadPoolExecutor.AbortPolicy | 丢弃任务并抛出RejectedExecutionException异常。是默认的策略 |
ThreadPoolExecutor.DiscardPolicy: | 丢弃任务,但是不抛出异常 这是不推荐的做法 |
ThreadPoolExecutor.DiscardOldestPolicy | 抛弃队列中等待最久的任务 然后把当前任务加入队列中 |
ThreadPoolExecutor.CallerRunsPolicy | 由主线程负责调用任务的run()方法从而绕过线程池直接执行 |
ExecutorService的常用方法
方法名称 | 说明 |
---|---|
void execute(Runnable command) | 执行任务/命令,没有返回值,一般用来执行 Runnable 任务 |
Future submit(Callable task) | 执行Callable任务,返回未来任务对象获取线程结果 |
void shutdown() | 等任务执行完毕后关闭线程池 |
List( shutdownNow() | 立刻关闭,停止正在执行的任务,并返回队列中未执行的任务 |