Executor源码解读

Executor源码解读

      • 〇、[源码版本] jdk 1.8
      • 一、不再显式创建线程
        • [举例1]代码示例
      • 二、不严格要求执行是异步的
        • [举例1]代码示例
      • 三、任务在调用者线程之外的某个线程中执行
        • [举例1]代码示例
      • 四、施加了某种限制的复合执行器
        • [举例1]代码示例
      • 五、concurrent包中提供的Executor的实现对象
        • [举例1]ExecutorService,这是一个更广泛的接口。
        • [举例2]ThreadPoolExecutor类,提供了一个可扩展的线程池实现。
        • [举例3]Executors类,为这些类和接口提供了的工厂和实用方法。
      • 六、内存一致性影响
      • 七、Executor接口只提供了execute方法
        • execute方法

〇、[源码版本] jdk 1.8

一、不再显式创建线程

Executor接口是执行提交的Runnable任务的对象。这个接口提供了一种方法,将任务提交与每个任务如何运行的机制解耦,包括线程使用、调度等的细节。通常使用Executor而不是显式创建线程。

[举例1]代码示例

为一组任务中的每个调用显式创建线程的方法:

new Thread(new(RunnableTask())).start()

使用Executor方式可以替代显示创建线程的方法:

Executor executor = <em>anExecutor</em>;
executor.execute(new RunnableTask1());
executor.execute(new RunnableTask2());

二、不严格要求执行是异步的

然而,Executor接口并不严格要求执行是异步的。在最简单的情况下,一个执行器可以立即在调用者的线程中运行提交的任务。

[举例1]代码示例

class DirectExecutor implements Executor {public void execute(Runnable r) {r.run();}
}

三、任务在调用者线程之外的某个线程中执行

更典型的是,任务在调用者线程之外的某个线程中执行。

[举例1]代码示例

下面的执行程序为每个任务生成一个新线程 。

class ThreadPerTaskExecutor implements Executor {public void execute(Runnable r) {new Thread(r).start();}}

四、施加了某种限制的复合执行器

许多Executor的实现对象,对任务的调度方式和时间施加了某种限制。

[举例1]代码示例

下面的执行器将任务的提交序列化到第二个执行器,是复合执行器。

 class SerialExecutor implements Executor {final Queue<Runnable> tasks = new ArrayDeque<Runnable>();final Executor executor;Runnable active;SerialExecutor(Executor executor) {this.executor = executor;}public synchronized void execute(final Runnable r) {tasks.offer(new Runnable() {public void run() {try {r.run();} finally {scheduleNext();}}});if (active == null) {scheduleNext();}}protected synchronized void scheduleNext() {if ((active = tasks.poll()) != null) {executor.execute(active);}}}

五、concurrent包中提供的Executor的实现对象

concurrent包中提供的Executor的实现对象有:

[举例1]ExecutorService,这是一个更广泛的接口。

一个ExecutorService使用可能的几个线程池中的一个线程池,执行每个提交的任务,通常使用 Executors工厂方法进行配置。

[举例2]ThreadPoolExecutor类,提供了一个可扩展的线程池实现。

继承自AbstractExecutorService接口,AbstractExecutorService实现了ExecutorService接口。

线程池解决两个不同的问题:
a.它们通常在执行大量异步任务时提供改进的性能,因为减少了每个任务的调用开销。
b.它们提供了一种限制和管理资源的方法,包括线程,在执行任务集合时的消耗。
同时,每个ThreadPoolExecutor还维护一些基本的统计信息,例如已完成任务的数量。

[举例3]Executors类,为这些类和接口提供了的工厂和实用方法。

在此concurrent包中定义了ExecutorExecutorServiceScheduledExecutorServiceThreadFactoryCallable类。

六、内存一致性影响

内存一致性影响:将Runnable对象提交给Executor之前,线程中的操作,其内存可见性发生在线程的执行开始前,也可能在另一个线程中。

七、Executor接口只提供了execute方法

execute方法

	void execute(Runnable command);

execute方法:在将来的某个时间执行给定的command命令。命令可以在新线程、池线程或调用线程中执行,具体取决于Executor的实现。
a.参数:runnable类型的任务
b.返回:无
c.异常:
throws RejectedExecutionException
如果参数任务command不能被接受执行
throws NullPointerException
如果参数任务commandnull

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/549153.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Javascript高级程序设计第二版第十二章--Event--笔记

今天给诸位分享一下 chapter 12 Events所谓事件就是页面与文档窗口发生交互的瞬间。当年事件发生时它可以被预定&#xff08;程序处理&#xff09;。事件有两个过程&#xff0c;冒泡过程&#xff0c;或捕获过程。冒泡是自上而下&#xff0c;捕获是自下而上。这个顺序是document…

ExecutorService源码解读

ExecutorService源码解读〇、[源码版本] jdk 1.8一、ExecutorService接口详解1、ExecutorService关闭方法概述[举例1]代码示例2、ExecutorService任务执行方法概述3、Executors工厂方法概述[举例1]代码示例4、内存一致性影响二、接口方法详解1、shutdown方法2、shutdownNow方法…

英语生词本

英语生词本 1、daemon [di:mən] 守护进程2、phase [英] [feiz] 阶段, 时期3、methodology [英] [ˌmeθəˈdɔlədʒi:] 方法学,方法论4、algorithmalgorithm [英] [ˈlɡəriəm] [美] [ˈlɡəˌrɪəm] 运算法则2. 算法&#xff1b;演算法&#xff1b;计算程序3. 演示5、…

Executors源码解读——创建ExecutorService线程池

Executors源码解读——创建ExecutorService线程池〇、[源码版本] jdk 1.8一、线程池概述二、线程池创建三、Executors源码解读newFixedThreadPool()newWorkStealingPool()newSingleThreadExecutor()newCachedThreadPool()newSingleThreadScheduledExecutor()〇、[源码版本] jdk…

《大话设计模式》读书笔记-索引

《大话设计模式》读书笔记-第1章 简单工厂模式 《大话设计模式》读书笔记-第2章 策略模式 《大话设计模式》读书笔记-第3章 单一职责原则 《大话设计模式》读书笔记-第4章 开放-封闭原则 《大话设计模式》读书笔记-第5章 依赖倒转原则 《大话设计模式》读书笔记-第6章 装饰模式…

Future源码解读

Future源码解读〇、[源码版本] jdk 1.8一、Future概述[举例1]示例代码[举例2]示例代码内存一致性影响二、Future接口的方法cancel方法isCancelled方法isDone方法get方法〇、[源码版本] jdk 1.8 一、Future概述 Future表示异步计算的结果。提供了检查计算是否完成、等待计算完…

RIP,EIGRP,OSPF融合网络互通实验(原创)

首先看拓扑&#xff1a; 一个面试考官问我一个这样的问题&#xff0c;拓扑如上&#xff0c;为什么R1上的lo0 PING 不通 R6 上的lo0,说是一切都按正常配置&#xff0c;说是考我EIGRP的特性。我当然很纳闷&#xff0c;如果都正常配置怎么会不通呢&#xff0c;最后他告诉我主要是考…

谷歌A/B实验——重叠实验基础设施解读

谷歌A/B实验——重叠实验基础设施解读〇、来源一、背景介绍二、如何划分参数三、谷歌设计的ab实验系统3.1 域和层的设计3.1.1 基础重叠域和层设计3.1.2 具备非重叠和重叠的域和层设计3.1.2 具备非重叠的域的嵌套设计优点3.1.3 具备非重叠的域的嵌套设计缺点3.1.4 启动层&#x…

oracle 备份

1.首先以 sysdba的身份登录数据库 SQL> conn sys/oracle as sysdba SQL> col name for a50 SQL> select * from v$controlfile; 找到控制文件所在目录 STATUS ------- NAME --------------------------------------- F:\ORACLE\ORADATA\AFIS40\CONTROL01.CTL F:\O…

Mysql 5.7 创建索引官方解读

一、环境 Mysql 5.7 二、Mysql索引创建解读 1.概述 通常我们在使用CREATE TABLE时会创建所有的索引。索引的创建对于 InnoDB 表尤其重要&#xff0c;其中主键决定了数据文件中行的物理布局。 CREATE INDEX是另一种添加索引的方式&#xff0c;针对已经创建的表添加索引。注…

ntp时间服务解析

网络时间协议NTP&#xff08;Network Time Protocol&#xff09;是用于互联网中时间同步的标准互联网协议。NTP的用途是把计算机的时间同步到某些时间标准。目前采用的时间标准是世界协调时UTC&#xff08;Universal Time Coordinated&#xff09;。NTP的主要开发者是美国特拉华…

java循环中list.add对象的坑——后加入元素覆盖早期数据成相同值问题

原因 list.add&#xff08;对象&#xff09;&#xff0c;放入的实质是对象的引用。当对象在循环外进行new后&#xff0c;第一次循环add对象1&#xff0c;第二次循环add对象2&#xff0c;由于放入实质是对象的引用&#xff0c;引用指向了对象2&#xff0c;故变成list里有两个对…

AspectJ切面自定义注解实现参数分组校验——基础概念(1)

AspectJ切面自定义注解实现参数分组校验——基础概念&#xff08;1&#xff09;一、环境二、validation-api源码解读2-1.Default源码解读2-2.valid源码解读2-3.Validation源码解读一、环境 maven 需要引入的依赖&#xff1a; <dependency><groupId>javax.valida…

【注册机】ColorSchemer Studio 2.1.0 注册机

下载地址&#xff1a;http://files.cnblogs.com/boringlamb/keygencs.rar转载于:https://www.cnblogs.com/boringlamb/archive/2010/09/01/1815264.html

AspectJ切面自定义注解实现参数分组校验——基础概念(2)

AspectJ切面自定义注解实现参数分组校验——基础概念&#xff08;2&#xff09;一、环境二、创建AspectJ2-1.基础概念2-2.Pointcut规则表达式2-3.切点标志符pointcut designator (PCD)1&#xff09;execution2&#xff09;within3&#xff09;this和target4&#xff09;args5&a…

5230主题下载

最近朋友买了新手机&#xff0c;可是她又是电脑白痴&#xff0c;告诉她要她用百度搜&#xff0c;硬是没找到&#xff0c;百般无奈我千挑万选&#xff0c;找到了这个网站&#xff0c;让方便也同样带给同样不知道怎么用百度的朋友了5230主题下载网址&#xff1a;http://d.958shop…

AspectJ切面自定义注解实现参数分组校验——代码实现(3)

AspectJ切面自定义注解实现参数分组校验——代码实现&#xff08;3&#xff09;一、环境1-1.备注二、代码实现2-1.注解定义2-2.组定义2-3.constraints使用2-4.切面定义2-5.复用ValidatorFactory2-6.单测校验2-7.说明一、环境 springbootmaven <dependency><groupId&…

solaris下修改 IPMP 配置

使用 IPMP 配置文件 /etc/default/mpathd 为 IPMP 组配置以下系统范围的参数。 FAILURE_DETECTION_TIME TRACK_INTERFACES_ONLY_WITH_GROUPS FAILBACK 如何配置 /etc/default/mpathd 文件 在具有 IPMP 组配置的系统上&#xff0c;承担主管理员角色或成为超级用户。 主管理员角色…

电力自动化及继电保护实验室规章制度

为了按时完成电力自动化及继电保护实验&#xff0c;确保实验时人身安全与设备安全&#xff0c;要严格遵守如下规定的安全操作规程 一、 仔细阅读实验指导书内容&#xff0c;严格按实验指导书中的步骤来做试验。 二、 实验时&#xff0c;人体不可接触带电线路。 三、 接线或拆线…

主板跳线连接技巧图解

作为一名新手&#xff0c;要真正从头组装好自己的电脑并不容易&#xff0c;也许你知道CPU应该插哪儿&#xff0c;内存应该插哪儿&#xff0c;但遇到一排排复杂跳线的时候&#xff0c;很多新手都不知道如何下手。 钥匙开机其实并不神秘 还记不记得你第一次见到装电脑的时候…