![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Executor
文章平均质量分 91
Java Executor Framework
说淑人
我想站的更高一些,好看到世界最真实的样子。
展开
-
Java ~ Executor ~ ScheduledExecutorService【源码】
ScheduledExecutorService(调度执行器服务)接口是ExecutorService(执行器服务)接口的子接口,在其的基础再次新增了“调度”的概念。调度执行器服务接口将“调度”概念细分为了“延迟”与“周期”两个概念。原创 2023-09-17 09:44:50 · 147 阅读 · 0 评论 -
Java ~ Executor ~ ScheduledExecutorService【总结】
ScheduledExecutorService(调度执行器服务)接口是ExecutorService(执行器服务)接口的子接口,在其的基础再次新增了“调度”的概念。调度执行器服务接口将“调度”概念细分为了“延迟”与“周期”两个概念。原创 2023-09-17 09:35:41 · 137 阅读 · 0 评论 -
Java ~ Collection/Executor ~ DelayQueue【源码】
DelayQueue(延迟队列)类是BlockingQueue(阻塞队列)接口的实现类之一,基于数组实现,特点是元素会被延迟头部移除。延迟队列类不允许存null值,或者说阻塞队列接口的所有实现类都不允许存null值。延迟队列类是无界队列,意味着其最大容量理论上只受限于堆内存的大小。延迟队列类是线程安全的,或者说阻塞队列接口的所有实现类都是线程安全的,其接口定义中强制要求实现类必须线程安全。延迟队列类的迭代器是弱一致性,即可能迭代到已移除的元素及无法迭代到新插入的元素。原创 2023-07-30 14:32:34 · 161 阅读 · 0 评论 -
Java ~ Collection/Executor ~ DelayQueue【总结】
DelayQueue(延迟队列)类是BlockingQueue(阻塞队列)接口的实现类之一,基于数组实现,特点是元素会被延迟头部移除。延迟队列类不允许存null值,或者说阻塞队列接口的所有实现类都不允许存null值。延迟队列类是无界队列,意味着其最大容量理论上只受限于堆内存的大小。延迟队列类是线程安全的,或者说阻塞队列接口的所有实现类都是线程安全的,其接口定义中强制要求实现类必须线程安全。延迟队列类的迭代器是弱一致性,即可能迭代到已移除的元素及无法迭代到新插入的元素。原创 2023-07-30 13:16:11 · 163 阅读 · 0 评论 -
Java ~ Executor【目录】
Executor原创 2023-02-20 21:38:58 · 193 阅读 · 0 评论 -
Java ~ Executor【源码】
Executor(执行器)接口是执行框架最顶级的接口,定义了执行器的概念,并明确了该框架的核心目标:将任务的(创建)递交与执行分离(并负责执行)。Executor(执行器)接口并不严格(即推荐但不强制)要求任务的执行是异步的。Executor(执行器)接口虽然在执行框架中的拥有最高的地位,但由于其功能过于单一,因此在实际开发中往往会使用其子接口ExecutorService(执行器服务)代替。原创 2022-11-27 16:52:31 · 787 阅读 · 0 评论 -
Java ~ Executor【总结】
Executor(执行器)接口是执行器框架的最顶级接口,定义了执行器的概念,并明确了该框架的核心目标:将任务的递交与执行分离(并负责执行)。执行器接口并不严格(推荐但不强制)要求任务的执行是异步的。执行器接口虽然在执行器框架中的拥有最高的地位,但由于其功能过于单一,因此在实际开发中往往会使用其子接口ExecutorService(执行器服务)代替。原创 2023-02-20 21:31:56 · 637 阅读 · 0 评论 -
Java ~ Executor ~ ExecutorService【源码】
关闭:被关闭后的执行器无法接受新递交的任务,并可自我选择是否阻止未完成的任务(即关闭前递交的,还未执行和执行中的任务)继续执行,用于执行器的内部管理;终止:终止的前提是关闭,用于表现在执行器终止后未完成任务的整体执行状态;结果:在执行器的递交基础上新增了返回值,用于监控任务的执行状态并获取任务的执行结果;类型:支持新的Callable(可调用的)接口类型的任务,在对结果的支持上更加方便;批量:支持任务的批量执行,用于提升任务的递交及执行效率。原创 2023-06-29 10:22:17 · 123 阅读 · 0 评论 -
Java ~ Executor ~ ExecutorService【总结】
关闭:被关闭后的执行器无法接受新递交的任务,并可自我选择是否阻止未完成的任务(即关闭前递交的,还未执行和执行中的任务)继续执行,用于执行器的内部管理;终止:终止的前提是关闭,用于表现在执行器终止后未完成任务的整体执行状态;结果:在执行器的递交基础上新增了返回值,用于监控任务的执行状态并获取任务的执行结果;类型:支持新的Callable(可调用的)接口类型的任务,在对结果的支持上更加方便;批量:支持任务的批量执行,用于提升任务的递交及执行效率。原创 2023-06-29 10:15:25 · 919 阅读 · 0 评论 -
Java ~ Executor ~ CompletionService【源码】
任务的“生产”与“消费”默认是同步的。同步“消费”的前提是确定具体需要被“消费”的任务。完成服务接口在定义上提供将任务的“生产”与“消费”从概念上分离的能力。原创 2023-07-16 14:30:03 · 164 阅读 · 0 评论 -
Java ~ Executor ~ AbstractExecutorService【源码】
AbstractExecutorService(抽象执行器服务)抽象类是ExecutorService(执行器服务)接口的抽象实现类,其作用是对执行器服务接口的部分方法定义进行流程规划。故而即使有时父类已经基于“模板模式”对某方法进行了默认的流程规划,但部分子类出于性能上的考量还是会选择重写该方法。抽象执行器服务抽象类规划了执行器服务接口定义的所有与任务递交相关方法的运行流程,该知识点的内容会在下文详述。原创 2023-06-29 11:49:52 · 139 阅读 · 0 评论 -
Java ~ Executor ~ CompletionService【总结】
任务的“生产”与“消费”默认是同步的。同步“消费”的前提是确定具体需要被“消费”的任务。完成服务接口在定义上提供将任务的“生产”与“消费”从概念上分离的能力。原创 2023-07-16 14:23:09 · 240 阅读 · 0 评论 -
Java ~ Executor ~ AbstractExecutorService【总结】
AbstractExecutorService(抽象执行器服务)抽象类是ExecutorService(执行器服务)接口的抽象实现类,其作用是对执行器服务接口的部分方法定义进行流程规划。故而即使有时父类已经基于“模板模式”对某方法进行了默认的流程规划,但部分子类出于性能上的考量还是会选择重写该方法。抽象执行器服务抽象类规划了执行器服务接口定义的所有与任务递交相关方法的运行流程,该知识点的内容会在下文详述。原创 2023-06-29 11:30:32 · 107 阅读 · 0 评论 -
Java ~ Executor ~ ExecutorCompletionService【源码】
任务的“生产”与“消费”默认是同步的。同步“消费”的前提是确定具体需要被“消费”的任务。CompletionService(完成服务)接口在定义上提供将任务的“生产”与“消费”从概念上分离的能力,而执行器完成服务类实现了这种能力,并支持按结束(完成/异常/取消)顺序对任务进行异步“消费”。原创 2023-07-23 11:57:07 · 120 阅读 · 0 评论 -
Java ~ Executor ~ ExecutorCompletionService【总结】
任务的“生产”与“消费”默认是同步的。同步“消费”的前提是确定具体需要被“消费”的任务。CompletionService(完成服务)接口在定义上提供将任务的“生产”与“消费”从概念上分离的能力,而执行器完成服务类实现了这种能力,并支持按结束(完成/异常/取消)顺序对任务进行异步“消费”。原创 2023-07-23 11:27:41 · 101 阅读 · 0 评论 -
Java ~ Executor ~ Future【源码】
Future(未来)可以代表任务,作为与任务进行交互的入口,用于追踪/获取任务的执行状态/结果。原创 2023-06-29 13:23:54 · 127 阅读 · 0 评论 -
Java ~ Executor ~ Future【总结】
Future(未来)可以代表任务,作为与任务进行交互的入口,用于追踪/获取任务的执行状态/结果。原创 2023-06-29 13:11:17 · 147 阅读 · 0 评论 -
Java ~ Executor ~ RunnableFuture【源码】
RunnableFuture(可运行未来)接口是Future(未来)接口的子接口,因此其同样可以代表任务,并追踪/获取代表任务的执行状态/结果。为代理行为提供上下文环境并无需指定run()方法,实现可运行未来接口的核心原因是为了令未来也成为任务。原创 2023-06-29 13:45:05 · 105 阅读 · 0 评论 -
Java ~ Executor ~ RunnableFuture【总结】
RunnableFuture(可运行未来)接口是Future(未来)接口的子接口,因此其同样可以代表任务,并追踪/获取代表任务的执行状态/结果。为代理行为提供上下文环境并无需指定run()方法,实现可运行未来接口的核心原因是为了令未来也成为任务。原创 2023-06-29 13:38:08 · 145 阅读 · 0 评论 -
Java ~ Executor ~ FutureTask【源码】
使用CAS操作的原因是为了避免并发影响,例如存在多个线程同时取消任务或任务因为执行而状态发生改变的情况,状态值的具体修改与mayInterruptIfRunning(如果运行可能中断)参数有关,如果其为false,则将状态修改为CANCELLED(4:已取消);成功对实际执行中的任务施加中断后,还需要将状态修改为INTERRUPTED(6:已中断),该修改不会使用CAS操作,而是使用一个顺序/延迟指令完成,因为该状态只是为了流程的规范,并不会对判断造成影响。当然,按未来任务的定义,可能还没有保存任务结果。原创 2023-06-29 15:27:02 · 168 阅读 · 0 评论 -
Java ~ Executor ~ FutureTask【总结】
FutureTask(未来任务)类是RunnableFuture(可运行任务)接口的实现类,故而其实例为Future(未来)的同时也是Runnable(可运行)。这意味着其不仅可以代表任务,本身也可以作为任务执行。未来任务类自定义了近似于理论状态的实际状态来满足自身实现的需要。NEW(0:新)COMPLETING(1:完成中)NORMAL(2:正常)EXCEPTIONAL(3:异常)CANCELLED(4:已取消)INTERRUPTING(5:中断中)INTERRUPTED(6:已中断)原创 2023-06-29 14:23:41 · 158 阅读 · 0 评论 -
Java ~ Collection/Executor ~ BlockingQueue【源码】
从本质上说,BlockingQueue(阻塞队列)接口应该属于Collection(集)框架的范畴,因为其继承了Queue(队列)接口。但由于其专为Executor(执行器)框架而设计,并且大多数情况都被用于容纳/管理向执行器递交的任务,因此通常都被划分到Executor(执行器)框架的范畴中。BlockingQueue(阻塞队列)接口最大的特点是阻塞(见名知意),换句话说,其定义上是线程安全的(即其子类无论采用了何种实现方式,都必须线程安全)。原创 2022-12-18 20:45:51 · 279 阅读 · 0 评论 -
Java ~ Collection/Executor ~ BlockingQueue【总结】
从本质上说,BlockingQueue(阻塞队列)接口(下文简称阻塞队列)应该属于Collection(集)框架的范畴,因为其继承了Queue(队列)接口。但由于其大多数情况都被用于容纳/管理执行器中的任务,因此通常都被划分到Executor(执行器)框架的范畴中。阻塞队列最大的特点是阻塞(这应该一眼就能看出来...),换句话说,其定义上是线程安全的,即实现无论采用了何种实现方式,都必须保证线程安全。阻塞队列不允许存null值。阻塞队列可能存在容量限定,这种阻塞队列被称为有界队列.原创 2023-02-12 14:54:50 · 429 阅读 · 0 评论 -
Java ~ Collection/Executor ~ LinkedBlockingQueue【源码】
LinkedBlockingQueue(链接阻塞队列)类可同时作为有界及无界队列使用。如果在创建LinkedBlockingQueue(链接阻塞队列)类对象(下文简称队列)时没有指定具体的容量,那其就是一个无界队列。LinkedBlockingQueue(链接阻塞队列)类是线程安全的,或者说BlockingQueue(阻塞队列)接口的所有的实现类都是线程安全的(接口的定义中强制要求实现类必须线程安全)。原创 2022-12-04 20:07:08 · 415 阅读 · 1 评论 -
Java ~ Collection/Executor ~ LinkedBlockingQueue【总结】
LinkedBlockingQueue(链接阻塞队列)类是BlockingQueue(阻塞队列)接口的主要实现类之一,也是Executor(执行器)框架最常搭配使用的实现之一,采用链表的方式实现。LinkedBlockingQueue(链接阻塞队列)类不允许存null值。LinkedBlockingQueue(链接阻塞队列)类不同于我们常规使用的Collection(集)接口的实现类,没有扩容的说法,即其容量会在创建时确定,之后不会再发生改变。原创 2022-12-04 19:33:50 · 681 阅读 · 0 评论 -
Java ~ Collection/Executor ~ ArrayBlockingQueue【源码】
ArrayBlockingQueue(数组阻塞队列)类(下文简称数组阻塞队列)是BlockingQueue(阻塞队列)接口的主要实现类之一,也是Executor(执行器)框架常用的实现之一,采用数组的方式实现。数组阻塞队列类不允许存null值。数组阻塞队列类只能作为有界队列使用。数组阻塞队列类是线程安全的。数组阻塞队列类支持公平访问策略。数组阻塞队列类的迭代器是弱一致性。原创 2023-03-19 14:21:44 · 359 阅读 · 0 评论 -
Java ~ Collection/Executor ~ ArrayBlockingQueue【总结】
ArrayBlockingQueue(数组阻塞队列)类(下文简称数组阻塞队列)是BlockingQueue(阻塞队列)接口的主要实现类之一,也是Executor(执行器)框架常用的实现之一,采用数组的方式实现。数组阻塞队列类不允许存null值。数组阻塞队列类只能作为有界队列使用。数组阻塞队列类是线程安全的。数组阻塞队列类支持公平访问策略。数组阻塞队列类的迭代器是弱一致性。原创 2023-03-19 15:11:32 · 366 阅读 · 0 评论 -
Java ~ Collection/Executor ~ BlockingDeque【源码】
BlockingDeque(阻塞双端队列)接口(下文简称阻塞双端队列)是BlockingQueue(阻塞队列)接口的子接口,在其的基础上进行了功能性的加强,新增了可在队列的两端进行插入/移除/检查操作的方法定义,就如同Deque(双端队列)接口对Queue(队列)接口做的那样。事实上,阻塞双端队列也确实同时是Deque(双端队列)接口的子接口,因此其新增的方法定义中有一部分是从Deque(双端队列)接口直接继承得来的。阻塞双端队列是Collection(集)框架的成员原创 2023-03-05 13:26:51 · 300 阅读 · 0 评论 -
Java ~ Collection/Executor ~ BlockingDeque【总结】
BlockingDeque(阻塞双端队列)接口(下文简称阻塞双端队列)是BlockingQueue(阻塞队列)接口的子接口,在其的基础上进行了功能性的加强,新增了可在队列的两端进行插入/移除/检查操作的方法定义,就如同Deque(双端队列)接口对Queue(队列)接口做的那样。阻塞双端队列是线程安全的,即实现类无论采用了何种实现方式,都必须保证线程安全,该定义继承自BlockingQueue(阻塞队列)接口。阻塞双端队列不允许存null值,该定义继承自BlockingQueue(阻塞队列)接口。原创 2023-03-05 14:50:56 · 366 阅读 · 0 评论 -
Java ~ Collection/Executor ~ LinkedBlockingDeque【源码】
LinkedBlockingDeque(链接阻塞双端队列)类(下文简称链接阻塞双端队列)是BlockingDeqeue(阻塞双端队列)接口的唯一实现类,采用链表的方式实现。链接阻塞双端队列不允许保存null。链接阻塞双端队列支持有界及无界两种使用方式,即是否人为限制可保存的元素总数。如果在创建链接阻塞双端队列时没有指定具体容量,则其便为无界队列。链接阻塞双端队列是线程安全的。链接阻塞双端队列实现了正/倒序两类迭代器,并且它们都是弱一致性的,即可能迭代到已移除的元素或迭代不到新插入的元素。原创 2023-03-06 17:54:35 · 401 阅读 · 0 评论 -
Java ~ Collection/Executor ~ LinkedBlockingDeque【总结】
LinkedBlockingDeque(链接阻塞双端队列)类(下文简称链接阻塞双端队列)是BlockingDeqeue(阻塞双端队列)接口的唯一实现类,采用链表的方式实现。链接阻塞双端队列不允许保存null。链接阻塞双端队列支持有界及无界两种使用方式,即是否人为限制可保存的元素总数。如果在创建链接阻塞双端队列时没有指定具体容量,则其便为无界队列。链接阻塞双端队列是线程安全的。链接阻塞双端队列实现了正/倒序两类迭代器,并且它们都是弱一致性的,即可能迭代到已移除的元素或迭代不到新插入的元素。原创 2023-02-19 22:55:47 · 416 阅读 · 0 评论 -
Java ~ Collection/Executor ~ TransferQueue【源码】
TransferQueue(迁移队列)接口(下文简称迁移队列)是BlockingQueue(阻塞队列)接口的两大子接口之一,在原本的操作定义上新增了迁移操作的定义。迁移队列的实现类不允许存null值,或者说BlockingQueue(阻塞队列)接口的所有的实现类都不允许存null值。迁移队列是线程安全的,或者说BlockingQueue(阻塞队列)接口的所有的实现类都是线程安全的(接口的定义中强制要求实现类必须线程安全)。原创 2023-03-12 14:21:11 · 232 阅读 · 0 评论 -
Java ~ Collection/Executor ~ TransferQueue【总结】
TransferQueue(迁移队列)接口(下文简称迁移队列)是BlockingQueue(阻塞队列)接口的两大子接口之一,在原本的操作定义上新增了迁移操作的定义。迁移队列的实现类不允许存null值。迁移队列是线程安全的。迁移队列虽然与BlockingQueue(阻塞队列)接口一样都被纳入Executor(执行器)框架的范畴,但同时是Collection(集)框架的成员。原创 2023-03-12 14:31:28 · 140 阅读 · 0 评论