Executor, ExecutorService 和 Executors区别与联系
一、结论
Executor, ExecutorService 都是接口,ExecutorService继承于Executor,
Executors是工具类,他提供对ThreadPoolExecutor的封装产生ExecutorService的具体实现类。
二、Executor和ExecutorService具体分析
ExecutorService它是线程池定义的一个接口,继承Executor。能够关闭线程池,提交线程获取执行结果,控制线程的执行。
shutdown(): Executor创建时处于运行状态。当调用ExecutorService.shutdown()后,线程池就会关闭,拒绝新提交的任务, 终止前允许执行以前提交的任务,包括队列中的任务。
shutdownNow():会将线程池关闭,拒绝新提交的任务,对于正在运行的线程进行打断,阻塞的队列中任务也会打断。这里会返回所有没有开始的任务。
isShutdown():是否关闭
isTerminated():是否所有的任务已经完成,如果完成则返回true
awaitTermination(long timeout, TimeUnit unit):当等待超过设定时间间隔之后,会监测ExecutorService是否已经关闭,如果已经关闭返回true,否则返回false。
<T> Future<T> submit(Callable<T> task) Future<?> submit(Runnable task) <T> Future<T> submit(Runnable task, T result):线程池中提交一个任务,包括callable类型或者是runable类型。返回future对象
<T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks) :批量提交任务并获得他们的future,Task列表与Future列表一一对应
<T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks, long timeout, TimeUnit unit):批量提交任务并获得他们的future,并限定处理所有任务的时间。
<T> T invokeAny(Collection<? extends Callable<T>> tasks):获取tasks任务中的一个成功的结果
invokeAny(Collection<? extends Callable<T>> tasks,long timeout, TimeUnit unit):在时间期间内,获取tasks中一个成功的结果
三、Executors具体使用
Executors提供了一系列静态工厂方法用于创建各种各样的线程池。
Executors.newFixedThreadPool():创建一个固定线程数的线程池,核心线程数和最大线程数一样的一个线程池。
Executors.newSingleThreadExecutor,创建一个单线程的线程池,队列LinkedBlockingQueue,一个几乎认为容量很大的队列。
Executors.newCachedThreadPool 创建一个可缓存的线程池,如果线程在60秒之后依旧空闲,那么就会被移除,在执行新的任务时,有活跃的线程就使用该线程,否则就新建一条线程
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
2021-03-17 Windows安装Jenkins并修改主目录路径
2020-03-17 10、springboot——CRUD导入静态资源以及设置默认访问首页①