2019独角兽企业重金招聘Python工程师标准>>>

public interface Executor {/*** Executes the given command at some time in the future.  The command* may execute in a new thread, in a pooled thread, or in the calling* thread, at the discretion of the {@code Executor} implementation.*/void execute(Runnable command);
}

Executor是一个接口, 这样的设计用来执行Runnable任务,把任务提交过程与具体的执行机制解耦开。有了Executor你不必再费心如何控制任务的执行,包括线程、调度等。当然这些都依赖于如何实现Executor接口,你可以使用单线程、多线程、线程池等来执行具体的任务, 甚至也可以不启用额外的线程,而在调用者所在的线程中完成任务。比如:

1,在调用者线程中完成任务:

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

2,多线程,每个任务一个线程:

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

3, Many Executor implementations impose some sort of limitation on how and when tasks are scheduled. The executor below serializes the submission of tasks to a second executor, illustrating a composite executor.

许多Executor的实现会对任务执行的时机和调度方法做一些定制。下面的SerialExecutor在任务的调度上做了定制, 使所有提交给serial executor的任务串行的执行, 而任务的具体执行过程交给另一个 executor 负责,改executor通过构造方法传入。

class SerialExecutor implements Executor {final Queue tasks = new ArrayDeque();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);}}}}

实现了Executor接口的子类:

AbstractExecutorService,

ExecutorService,

ForkJoinPool,

ScheduledExecutorService,

ScheduledThreadPoolExecutor,

ThreadPoolExecutor

转载于:https://my.oschina.net/u/255456/blog/339209

并发基础(一):Executor相关推荐

  1. Java并发基础构建模块简介

    在实际并发编程中,可以利用synchronized来同步线程对于共享对象的访问,用户需要显示的定义synchronized代码块或者方法.为了加快开发,可以使用Java平台一些并发基础模块来开发. 注 ...

  2. JAVA多线程和并发基础面试问答(转载)

    JAVA多线程和并发基础面试问答 原文链接:http://ifeve.com/java-multi-threading-concurrency-interview-questions-with-ans ...

  3. Java并发基础(六) - 线程池

    Java并发基础(六) - 线程池 1. 概述 这里讲一下Java并发编程的线程池的原理及其实现 2. 线程池的基本用法 2.1 线程池的处理流程图 该图来自<Java并发编程的艺术>: ...

  4. 并发基础知识 — 线程安全性

    前段时间看完了<并发编程的艺术>,总感觉自己对于并发缺少一些整体的认识.今天借助<Java并发编程实践>,从一些基本概念开始,重新整理一下自己学过并发编程.从并发基础开始,深入 ...

  5. Go学习笔记—Go并发基础

    Go并发基础 并行:程序在任意时刻内都是同时运行的 并发:程序在单位时间内都是同时运行的 ​扇入:多条通道聚合到一条通道中(select聚合,加密解密服务) ​扇出:一条通道发散到多条通道中(goro ...

  6. 多线程之并发基础(四)

    Java多线程虽然知识点众多,但抓住了基础,也不难解决. 接着上一篇并发基础,再说一些额外的知识点.上篇文章我们说了线程的状态,还有线程的一些属性.这次我们再说一些Thread类的用法,再说下线程组的 ...

  7. java线程抢占式执行,Java并发基础(一)-线程基础

    原标题:Java并发基础(一)-线程基础 只要涉及到线程,其运行结果就是不确定的,虽然说java很早就提供了线程以及并发的支持,但是我们需要知道,线程是完全交给调度器的.有很多同学在编写书上的代码时, ...

  8. Java 并发 —— Thread、Executor、线程池

    Java 线程池: ThreadPoolExecutor,创建此线程池的方法: Executors.newFixedThreadPool(): Executors.newCachedThreadPoo ...

  9. Java并发(一)并发基础

    https://www.cnblogs.com/jinshuai86/p/9226164.html Java编程的逻辑 Java并发编程的艺术 极客时间:Java并发编程实战 Java并发基础知识 并 ...

  10. 《.NET并发编程实战》之 函数式并发基础

    本书是一本划时代的著作!在以下领域具有非常深远的意义: .NET 开发领域--本书再次将.NET 开发人员进行了分层隔代. 高性能/多核/并发编程领域--本书让锁从此变成过去时. 程序员职业生涯领域- ...

最新文章

  1. ansible所有模块一览
  2. RS232串口交叉直连
  3. 解密谷歌机器学习工程最佳实践——机器学习43条军规 翻译 2017年09月19日 10:54:58 98310 本文是对Rules of Machine Learning: Best Practice
  4. 工具分享 --- 分享一个在线制作ico的网站
  5. bigquery_如何在BigQuery中进行文本相似性搜索和文档聚类
  6. java基础—自定义一个比较器,对TreeSet 集合中的元素按指定方法来排序(java集合六)
  7. 移动端图片上传后进行压缩功能
  8. java 轻量级同步volatile关键字简介与可见性有序性与synchronized区别 多线程中篇(十二)...
  9. labelme标注工具实现json标注数据批量转换
  10. 图片在xml文件中直接加载.9文件
  11. 使用yum安装Apache+PHP+MySQL
  12. 爬虫基础以及 re,BeatifulSoup,requests模块使用
  13. Vue 双向数据绑定原理分析
  14. 求最大公约数(辗转相除法)
  15. 关于APP接口设计 注意事项
  16. 修复steam服务器失败怎么办,steam服务器失败
  17. 国美易卡依托大数据平台提供便捷服务
  18. 2022 CCF中国软件大会(CCF Chinasoft)“CCF-华为胡杨林基金-系统软件专项”论坛成功召开...
  19. 电路模型和电路定律(Ⅲ)
  20. 程序员,5个步骤改善你的英语阅读技能

热门文章

  1. 基数排序python实现
  2. 会话技术CookieSession
  3. 如何用原生js替换字符串中的某个字符(或字符串)为指定的字符串?
  4. 五大场景深解无服务器架构如何实践?
  5. font-family字体总结
  6. postman指定User-Agent的header无效
  7. Spring 常用工具类
  8. 实现超长焦梦想的捷径——试用适马150-500毫米F5-6.3 OS镜头
  9. 秋天六食物吃出好皮肤
  10. 每日一题(开开森森学前端之变量与函数)