Java多线程—Executor框架概述

1. 任务Task相关的接口与类

1.1 Runnable

表示一个可被执行的命令,通常用于在不同线程中执行任务。

package java.lang;

public interface Runnable {
    public void run();
}

1.2 Callable<V>

表示一个有返回结果的任务

package java.util.concurrent;

public interface Callable<V> {
    V call() throws Exception;
}

1.3 Future<V>

表示一个异步任务的结果。

package java.util.concurrent;

public interface Future<V> {

    /**
     * 取消任务的执行。
     * 以下几种情况不能成功取消任务:
     * 1.任务已完成。 2.任务已经被取消。 3.任务因为某些原因不能被取消。
     *
     * 如果成功过,任务将不会执行。
     * 如果任务已经启动,参数mayInterruptIfRunning将决定执行任务线程是否应该被中断,已达到停止任务的目的。
     *
     * 该方法返回后,isDone()将总是返回true。
     * 如果该方法返回true,isCanelled()将返回true。
     */
    boolean cancel(boolean mayInterruptIfRunning);

    /**
     * 返回true表示任务在完成前被取消。
     */
    boolean isCancelled();

    /**
     * 返回true表示任务完成
     *
     * 任务完成可能原因如下:
     * 1.正常执行完成 2.异常 3.被取消
     */
    boolean isDone();

    /**
     * 等待任务的完成,并返回结果。
     *
     * @return 返回任务执行结果
     * @throws CancellationException 当任务被取消时
     * @throws ExecutionException 当任务执行出现异常时
     * @throws InterruptedException 等待过程中线程被中断时
     */
    V get() throws InterruptedException, ExecutionException;

    /**
     * 在指定时间内等待任务的完成,并返回结果。
     *
     * @param 等待超时最长时间
     * @param 时间单位
     * @return 返回任务执行结果
     * @throws CancellationException 当任务被取消时
     * @throws ExecutionException 当任务执行出现异常时
     * @throws InterruptedException 等待过程中线程被中断时
     * @throws TimeoutException 等待超时
     */
    V get(long timeout, TimeUnit unit)
        throws InterruptedException, ExecutionException, TimeoutException;
}

1.4 RunnableFuture<V>

该接口继承于Runnable和Future。

package java.util.concurrent;

public interface RunnableFuture<V> extends Runnable, Future<V> {
    void run();
}

1.5 FutureTask<V>

一个可以取消的异步任务。该类实现了RunnableFuture接口。

2. Executor框架

2.1 Executor

Executor负责执行提交的Runnable任务。这个接口提供了一种将任务提交和任务执行解耦的机制。Executor通常用于代替显示创建线程。

package java.util.concurrent;

public interface Executor {
    void execute(Runnable command);
}

2.2 ExecutorService

该接口继承于Executor接口。提供了管理声明周期的方法和提交任务的便利方法。

public interface ExecutorService extends Executor {

    void shutdown();

    List<Runnable> shutdownNow();

    boolean isShutdown();

    boolean isTerminated();

    boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException;

    <T> Future<T> submit(Callable<T> task);

    <T> Future<T> submit(Runnable task, T result);

    Future<?> submit(Runnable task);

    <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks) throws InterruptedException;

    <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks, long timeout, TimeUnit unit) throws InterruptedException;

    <T> T invokeAny(Collection<? extends Callable<T>> tasks) throws InterruptedException, ExecutionException;

    <T> T invokeAny(Collection<? extends Callable<T>> tasks, long timeout, TimeUnit unit)
        throws InterruptedException, ExecutionException, TimeoutException;
}

2.3 Executors

Executors为一个静态工厂,用于生产Executor、ExecutorService、ScheduledExecutorService、ThreadFactory和Callable。

package java.util.concurrent;

public class Executors {

    public static ExecutorService newFixedThreadPool(int nThreads) {
        return new ThreadPoolExecutor(nThreads, nThreads,
                                      0L, TimeUnit.MILLISECONDS,
                                      new LinkedBlockingQueue<Runnable>());
    }

    public static ExecutorService newSingleThreadExecutor() {
        return new FinalizableDelegatedExecutorService
            (new ThreadPoolExecutor(1, 1,
                                    0L, TimeUnit.MILLISECONDS,
                                    new LinkedBlockingQueue<Runnable>()));
    }

    public static ExecutorService newCachedThreadPool() {
        return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
                                      60L, TimeUnit.SECONDS,
                                      new SynchronousQueue<Runnable>());
    }

    public static ScheduledExecutorService newSingleThreadScheduledExecutor() {
        return new DelegatedScheduledExecutorService
            (new ScheduledThreadPoolExecutor(1));
    }

    public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize) {
        return new ScheduledThreadPoolExecutor(corePoolSize);
    }

    public static ThreadFactory defaultThreadFactory() {
        return new DefaultThreadFactory();
    }

    public static ThreadFactory privilegedThreadFactory() {
        return new PrivilegedThreadFactory();
    }

    public static <T> Callable<T> callable(Runnable task, T result) {
        if (task == null)
            throw new NullPointerException();
        return new RunnableAdapter<T>(task, result);
    }

    public static Callable<Object> callable(Runnable task) {
        if (task == null)
            throw new NullPointerException();
        return new RunnableAdapter<Object>(task, null);
    }

    /** Cannot instantiate. */
    private Executors() {}
}

3. UML类图

版权声明:本文为博主原创文章, 转载请标明出处http://blog.csdn.net/sun927

时间: 2024-12-23 21:55:48

Java多线程—Executor框架概述的相关文章

Java三大主流框架概述

Java三大主流框架概述 邮箱:[email protected] Struts.Hibernate和Spring是我们Java开发中的常用关键,他们分别针对不同的应用场景给出最合适的解决方案.但你是否知道,这些知名框架最初是怎样产生的?我们知道,传统的Java Web应用程序是采用JSP+Servlet+Javabean来实现的,这种模式实现了最基本的MVC分层,使的程序结构分为几层,有负责前台展示的JSP.负责流程逻辑控制的Servlet以及负责数据封装的Javabean.但是这种结构仍然存

Java的Executor框架和线程池实现原理

一,Java的Executor框架 1,Executor接口 public interface Executor { void execute(Runnable command); } Executor接口是Executor框架中最基础的部分,定义了一个用于执行Runnable的execute方法,它没有实现类只有另一个重要的子接口ExecutorService 2,ExecutorService接口 //继承自Executor接口 public interface ExecutorServic

Java线程池 Executor框架概述

线程池的意义 循环利用线程资源,避免重复创建和销毁线程 线程池的任务是异步执行的,只要提交完成就能快速返回,可以提高应用响应性 Java线程池还有一个很重要的意义:Java线程池就是JDK 5 推出的Executor框架,在此之前Java线程既是工作任务又是执行机制,而Executor框架把工作任务与执行机制分离开来:工作任务包括Runnable接口和Callable接口,而执行机制由Executor接口提供. Executor 类继承体系 Executor框架由三个部分组成 工作任务:Runn

Java并发Executor框架

1 Executor框架简介 从JDK5开始,工作单元和执行机制隔离开来,工作单元包括Runnable和Callable,执行机制由Executor提供. 调用关系:Java线程一对一映射到本地操作系统的系统线程,当多线程程序分解若干任务,使用用户级的调度器(Executor框架)将任务映射为固定数量的线程,底层,操作系统吧.内核将这些线程映射到硬件处理器上. 2.EXecutor结构成员 Executor是一个接口,它将任务的提交与任务的执行分离开来. ThreadPoolExecutor是线

JAVA的Executor框架

Executor框架分离了任务的创建和执行.JAVA SE5的java.util.concurrent包中的执行器(Executor)管理Thread对象,从而简化了并发编程.Executor引入了一些功能类来管理和使用线程Thread,其中包括线程 池,Executor,Executors,ExecutorService,CompletionService,Future,Callable等. 1.Executor接口 public interface Executor{ void execut

Java SSH主流框架概述及java相关技术推荐!

转载于豆瓣,观山居士(http://www.douban.com/note/320140839/). 你应该掌握的Java技术当我们在技术线路中选择了Java,也就选择了你必须持续学习,经常关注最新的技术,了解它们,看是否适合你的需要,然后学习使用它们.Java基础:◆Java原理和使用,包括基本的语言.语法知识和API◆JSP+Servlet,Java Web开发的基础这方面可以关注Java开发基础专题.服务器:◆WebLogic的原理.使用和配置◆Tomcat:轻量的JavaWeb容器,和W

java的Spring 框架概述

◆简介 意图:解决公司运用开发的复杂性 功用:运用根本的JavaBean替代EJB,并供给了更多的公司运用功用 规模:任何Java运用 Spring 结构是一个分层架构,由 7 个界说良好的模块构成号码归属地查询.Spring 模块构建在中心容器之上,中心容器界说了创建.装备和办理 bean 的办法. 构成 Spring 结构的每个模块(或组件)都能够独自存在关键词挖掘工具,或许与其他一个或多个模块联合完结.每个模块的功用如下: • 中心容器:中心容器供给 Spring 结构的根本功用.中心容器

新葡京源码搭建与Java多线程进程的概述

1:要想了解多线程,必须先了解线程,而要想了解线程,必须先了解进程,因为线程是依赖于进程而存在. 2:什么是进程?通过任务管理器我们就看到了进程的存在.而通过观察,我们发现只有运行的程序才会出现进程.新葡京源码搭建QQ:2152876294 网址diguaym.com 进程:就是正在运行的程序. 进程是系统进行资源分配和调用的独立单位.每一个进程都有它自己的内存空间和系统资源. 3:多进程有什么意义呢?单进程的计算机只能做一件事情,而我们现在的计算机都可以做多件事情.举例:一边玩游戏(游戏进程)

java 多线程—— 线程让步

java 多线程 目录: Java 多线程——基础知识 Java 多线程 —— synchronized关键字 java 多线程——一个定时调度的例子 java 多线程——quartz 定时调度的例子 java 多线程—— 线程等待与唤醒 java 多线程—— 线程让步 概述 第1 部分 yield()介绍 第2 部分 yield()示例 第3 部分 yield() 与 wait()的比较 第1 部分 yield()介绍 yield()的作用是让步.它能让当前线程由“运行状态”进入到“就绪状态”