Executor框架的使用示意图
Executor框架的使用示意图
线程池主要包括三个部分:
任务
实现Runnable或者Callable的类
执行
ExecutorService,主要实现类:
ThreadPoolExecutor
由Executors可以创建4种:SingleThreadExecutor,CachedThreadPool,FixedThreadPool,ScheduledExecutorService其实就是对应的ThreadPoolExecutor的参数不一样。所以在实际使用中可以自己根据需要创建线程池
1 SingleThreadExecutor核心数等于最大线程数,闲置时间设置为0.(适用于为了满足资源管理的需求,而需要限制当前线程数量的应用场 景,它适用于负载比较重的服务器,书上原话,不太明白)。如果有线程在执行某个任务过程中失败了,会创建新的线程继续执行
SingleThreadExecutor2 SingleThreadExecutor 只有一个线程处理,闲置时间为0。适用于使用单线程处理的场景。如果这一个线程在执行某个任务过程中失败了,会创建新的线程继续执行
SingleThreadExecutor3 CachedThreadPool 核心线程数为0,最大线程数为Integer最大值即2的31次方减1.闲置时间为60秒,使用的阻塞队列为SynchronousQueue。线程不够用了就新增一个线程处理任务,所以不需要队列存储任务而使用SynchronousQueue。适用于执行很多的短期异步任务的小程序,或者 是负载较轻的服务器。
CachedThreadPool4 ScheduledThreadPoolExecutor 最大线程数为Integer最大值,无闲置,阻塞队列使用DelayedWorkQueue。因为这个队列有了定时的特性。
ScheduledThreadPoolExecutor ScheduledThreadPoolExecutor定时器不使用Timer的原因:Timer一个任务执行过久会影响系统调度,对时间敏感,不能处理异常,不能获取返回结果,不能排序
结果
无结果或者Future,通常为FutureTask
FutureTask实现了RunnableFuture,改类继承了Runnable和Callable,所以FutureTask可以作为任务传递。
FutureTask实现和使用放另一篇文章,还需要补充相关知识,以下是调用get(),cancel()过程
FutureTask执行get和cancel过程
网友评论