`
周凡杨
  • 浏览: 234520 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Executor入门 | Executor框架

阅读更多
讲到并发就不得不讲一下Executor框架,其框架主要类关系图如下:



 

从图中可以看出来,接口Executor是框架知识点的引路者,那就从它讲起!

 

 

一:关于Executor的源码

 

/*
 * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 * Written by Doug Lea with assistance from members of JCP JSR-166
 * Expert Group and released to the public domain, as explained at
 * http://creativecommons.org/publicdomain/zero/1.0/
 */
package java.util.concurrent;

/**
 * An object that executes submitted {@link Runnable} tasks. This
 * interface provides a way of decoupling task submission from the
 * mechanics of how each task will be run, including details of thread
 * use, scheduling, etc.  An <tt>Executor</tt> is normally used
 * instead of explicitly creating threads. For example, rather than
 * invoking <tt>new Thread(new(RunnableTask())).start()</tt> for each
 * of a set of tasks, you might use:
 *
 * @since 1.5
 * @author Doug Lea
 */
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 <tt>Executor</tt> implementation.
     *
     * @param command the runnable task
     * @throws RejectedExecutionException if this task cannot be
     * accepted for execution.
     * @throws NullPointerException if command is null
     */
    void execute(Runnable command);
}

 

说明看源码,简单的不得了,就一个execute方法,参数为Runnable类型的对象!学过线程的都应该知道,Thread类就是Runnable的实现类,那execute方法可以传Thread对象。

 

在这列举一下Runnable的实现类:

  • AsyncBoxView.ChildState         用于Java Swing开发
  • FutureTask                      用于异步计算
  • RenderableImageProducer         用于AWT开发图像异步生成
  • SwingWorker                     用于Java Swing开发
  • Thread                          用于Java线程开发
  • TimerTask                       用于计时器任务

 其中标红的是需要重点学习的!

 

   

二: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)   执行程序使任务提交与第二个执行程序保持连续,这说明了一个复合执行程序。

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);
         }
     }

 }

 

 

 

 

 

参考资料:

JDK API 1.6.0

http://www.iteye.com/topic/366591

 

 

 

  

  

  • 大小: 102.6 KB
0
2
分享到:
评论

相关推荐

    实时计算框架:Spark集群搭建与入门案例.docx

    实时计算框架Spark是一种高效的大规模数据处理工具,其核心特性在于内存计算,使得数据处理速度比传统的MapReduce有了显著提升。Spark通过DAG(有向无环图)执行引擎优化了计算流程,支持多种计算模式,包括批处理、...

    大数据Spark入门到精通v3.0版

    001 - Spark框架 - 简介.avi 002 - Spark框架 - Vs Hadoop.avi 003 - Spark框架 - 核心模块 - 介绍.avi 005 - Spark框架 - ...020 - Spark框架 - 核心概念 - Executor & Core & 并行度.avi 023 - SparkCore - 分布式

    Java并发编程从入门到精通(pdf)(附源码)

    接着,书中将深入探讨Java并发工具类,如Executor框架、Semaphore信号量、CyclicBarrier和CountDownLatch等,这些工具在实际项目中有着广泛的应用,学习它们能帮助开发者更好地控制和协调并发任务。 此外,书中的...

    Spark入门(完整版)

    《Spark入门(完整版)》是一本全面介绍Apache Spark技术的指南,旨在帮助初学者快速掌握这个大数据处理领域的核心工具。Spark作为一个强大的分布式计算框架,因其高效、易用和多模态处理能力,在大数据和机器学习...

    Mabatis快速入门(一).rar_Mybatis入门_mabatis代码_mabatis入门按理

    MyBatis是一个强大的Java持久层...总之,MyBatis是一个强大且灵活的持久层框架,通过"Mabatis快速入门(一)"的学习,你可以快速上手并应用到实际项目中。记得在实践中不断探索和学习,提升你的开发效率和代码质量。

    SpringMVC+MyBatis开发从入门到实践源码

    在"SpringMVC+MyBatis开发从入门到实践源码"这个项目中,你将会找到各个章节的代码示例,这些示例涵盖了从基本的配置到复杂的业务场景。例如,如何设置SpringMVC的DispatcherServlet,如何编写Controller,如何配置...

    Spark学习总结-入门.rar_Spark!_spark_spark入门_大数据 spark

    Spark是Apache软件基金会下的一个开源大数据处理框架,以其高效、灵活和易用的特性在大数据领域备受推崇。本文将基于“Spark学习总结-入门.rar”这份资料,对Spark的基础知识进行详细阐述,帮助读者深入理解Spark的...

    本资源是关于MyBatis持久层框架开发的Java框架开发技术的实验指导书,里面包括两个系统和基础讲解

    实验一:MyBatis入门案例 实验目标是掌握MyBatis环境的搭建和基本程序的编写。MyBatis的工作原理主要包括以下步骤: 1. **配置文件读取**:首先,MyBatis会读取核心配置文件`mybatis-config.xml`,这个文件定义了...

    spring web flow入门demo

    这个"spring web flow入门demo"是一个理想的学习资源,适合初学者掌握该框架的基本概念和用法。 Spring Web Flow 提供了一种声明式的方式来定义用户界面的导航流程,允许开发者明确地指定用户在应用程序中的行为...

    iBatis入门

    iBatis是一个开源的Java库,它为数据库访问提供了一个灵活的框架,使得开发者能够将SQL语句直接集成到应用程序中,避免了传统的数据访问层(DAL)中的大量模板代码。iBatis并非一个完整的ORM(对象关系映射)框架,...

    iBatis入门(三)

    **iBatis入门(三)** 在本篇中,我们将深入探讨iBatis,这是一个流行的开源持久层框架,它允许开发者将SQL语句与Java代码分离,提供更灵活的数据库操作方式。iBatis的核心是SQL Maps,这些映射文件包含了SQL语句以及...

    java书籍从入门到精通.rar

    - **线程池**:Executor框架允许创建和管理线程池,提高系统资源利用率。 5. **网络编程** - **Socket编程**:Java提供了Socket和ServerSocket类进行TCP/IP通信。 - **HTTP客户端与服务器**:使用...

    Ibatis 入门小例子

    6. **Executor 执行器**:Ibatis 内部有一个执行器(Executor),负责执行 SQL 语句,根据不同的事务控制策略,它可以是 SimpleExecutor、ReuseExecutor 或 BatchExecutor。 7. **ParameterHandler**:这个接口处理...

    ibatis入门教程_ibatis入门教程_源码

    Ibatis,全称为MyBatis,是一个优秀的Java持久层框架,它主要负责SQL映射,使得...通过学习这个Ibatis入门教程,你可以了解并掌握如何在Java应用中使用Ibatis进行数据操作,为后续的进阶学习和项目开发打下坚实的基础。

    ibatis-sqlMap-入门教程(代码)

    【标题】"ibatis-sqlMap-入门教程(代码)" 涉及的知识点主要集中在使用MyBatis(原iBATIS)框架进行数据库操作的初步实践上。MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射,避免了几乎...

    MyBatis的jar包以及入门学习程序.zip

    在这个"MyBatis的jar包以及入门学习程序.zip"压缩文件中,包含了MyBatis的核心库mybatis-3.5.2.zip,这是MyBatis框架的最新版本。这个版本的MyBatis提供了许多增强的功能,包括对Java 8的支持,改进的SQL构建器,...

    4.2mybatis入门教程(一)

    - **Executor**:执行器,内部处理 SQL 执行,有基本执行器和缓存执行器。 - **Mapped Statement**:封装了 SQL 语句、输入参数类型、输出结果类型等信息。 ### 3. MyBatis 入门程序 在 MyBatis 入门程序中,通常...

    MyBatis入门到精通配套资源

    MyBatis是一款强大的Java持久层框架,它实现了SQL与Java代码的解耦,极大地提高了开发效率。本资源包是专为初学者至进阶者设计的一套完整的MyBatis学习资料,旨在帮助开发者全面理解并掌握MyBatis的核心概念和技术。...

Global site tag (gtag.js) - Google Analytics