`
Donald_Draper
  • 浏览: 984389 次
社区版块
存档分类
最新评论

ExecutorService接口定义

    博客分类:
  • JUC
 
阅读更多
Executor接口的定义:http://donald-draper.iteye.com/blog/2365625
package java.util.concurrent;
import java.util.List;
import java.util.Collection;
import java.security.PrivilegedAction;
import java.security.PrivilegedExceptionAction;

/**
 * An {@link Executor} that provides methods to manage termination and
 * methods that can produce a {@link Future} for tracking progress of
 * one or more asynchronous tasks.
ExecutorService提供了管理termination方法和一些可以创建Future追踪一个或多个
异步线程执行的过程。
 *
 * <p> An <tt>ExecutorService</tt> can be shut down, which will cause
 * it to reject new tasks.  Two different methods are provided for
 * shutting down an <tt>ExecutorService</tt>. The {@link #shutdown}
 * method will allow previously submitted tasks to execute before
 * terminating, while the {@link #shutdownNow} method prevents waiting
 * tasks from starting and attempts to stop currently executing tasks.
 * Upon termination, an executor has no tasks actively executing, no
 * tasks awaiting execution, and no new tasks can be submitted.  An
 * unused <tt>ExecutorService</tt> should be shut down to allow
 * reclamation of its resources.
 *
ExecutorService可以被关闭,将会拒绝新的任务。ExecutorService提供了关闭的
两个版本。#shutdown方法在terminating前,运行执行已经提交的任务,#shutdownNow方法
将会阻止已经starting等待执行的线程,并尝试停止当前正在执行的任务。处于termination
状态时,执行器没有任务需要执行,没有任务等待执行,没有新任务可以提交。一个无用
的ExecutorService应该被关系,以便回收资源。
 * <p> Method <tt>submit</tt> extends base method {@link
 * Executor#execute} by creating and returning a {@link Future} that
 * can be used to cancel execution and/or wait for completion.
 * Methods <tt>invokeAny</tt> and <tt>invokeAll</tt> perform the most
 * commonly useful forms of bulk execution, executing a collection of
 * tasks and then waiting for at least one, or all, to
 * complete. (Class {@link ExecutorCompletionService} can be used to
 * write customized variants of these methods.)
 *
 submit方法扩展了Executor#execute方法,可以创建和返回一个Future,用于取消线程的
 执行或等待线程执行完成。invokeAny和invokeAll执行一个任务集合,直到至少一个或所有执行完。
ExecutorCompletionService可以被用作这些方法的具体实现
 * <p>The {@link Executors} class provides factory methods for the
 * executor services provided in this package.
 *
Executors提供创建执行器服务的工厂方法
 * <h3>Usage Examples</h3>
 *
 * Here is a sketch of a network service in which threads in a thread
 * pool service incoming requests. It uses the preconfigured {@link
 * Executors#newFixedThreadPool} factory method:
 *
 这里是一个线程池服务执行多个线程用于接受请求的网络通信服务实例,用到了
Executors#newFixedThreadPool工厂方法。
 * <pre>
 * class NetworkService implements Runnable {
 *   private final ServerSocket serverSocket;
 *   private final ExecutorService pool;
 *
 *   public NetworkService(int port, int poolSize)
 *       throws IOException {
 *     serverSocket = new ServerSocket(port);
 *     pool = Executors.newFixedThreadPool(poolSize);
 *   }
 *
 *   public void run() { // run the service
 *     try {
 *       for (;;) {
 *         pool.execute(new Handler(serverSocket.accept()));
 *       }
 *     } catch (IOException ex) {
 *       pool.shutdown();
 *     }
 *   }
 * }
 *
 * class Handler implements Runnable {
 *   private final Socket socket;
 *   Handler(Socket socket) { this.socket = socket; }
 *   public void run() {
 *     // read and service request on socket
 *   }
 * }
 * </pre>
 *
 * The following method shuts down an <tt>ExecutorService</tt> in two phases,
 * first by calling <tt>shutdown</tt> to reject incoming tasks, and then
 * calling <tt>shutdownNow</tt>, if necessary, to cancel any lingering tasks:
 *
 下面这个方法在两个阶段关闭ExecutorService,第一次拒绝执行新的任务,
 第二种shutdownNow,如果需要取消拖延的任务。
 * <pre>
 * void shutdownAndAwaitTermination(ExecutorService pool) {
 *   pool.shutdown(); // Disable new tasks from being submitted
 *   try {
 *     // Wait a while for existing tasks to terminate
 *     if (!pool.awaitTermination(60, TimeUnit.SECONDS)) {
 *       pool.shutdownNow(); // Cancel currently executing tasks
 *       // Wait a while for tasks to respond to being cancelled
 *       if (!pool.awaitTermination(60, TimeUnit.SECONDS))
 *           System.err.println("Pool did not terminate");
 *     }
 *   } catch (InterruptedException ie) {
 *     // (Re-)Cancel if current thread also interrupted
 *     pool.shutdownNow();
 *     // Preserve interrupt status
 *     Thread.currentThread().interrupt();
 *   }
 * }
 * </pre>
 *
 * <p>Memory consistency effects: Actions in a thread prior to the
 * submission of a {@code Runnable} or {@code Callable} task to an
 * {@code ExecutorService}
 * [url=package-summary.html#MemoryVisibility]<i>happen-before</i>[/url]
 * any actions taken by that task, which in turn <i>happen-before</i> the
 * result is retrieved via {@code Future.get()}.
 *
 内存一直性:线程任务提交的ExecutorService发生在,任务执行结果返回之前。
 * @since 1.5
 * @author Doug Lea
 */
public interface ExecutorService extends Executor {
/**
     * Initiates an orderly shutdown in which previously submitted
     * tasks are executed, but no new tasks will be accepted.
     * Invocation has no additional effect if already shut down.
     *
     启动一个有持续的关闭过程,先前提交的线程(已执行)将会执行完,不再接受新的任务。
     如果线程服务已经关闭,此调用不会有多余的效果。
     * <p>This method does not wait for previously submitted tasks to
     * complete execution.  Use {@link #awaitTermination awaitTermination}
     * to do that.
     *
     这个方法不会等待先前提交的线程(已提交,还没执行)完成执行,我们可以用
     awaitTermination方法等待这些线程执行完。
     * @throws SecurityException if a security manager exists and
     *         shutting down this ExecutorService may manipulate
     *         threads that the caller is not permitted to modify
     *         because it does not hold {@link
     *         java.lang.RuntimePermission}<tt>("modifyThread")</tt>,
     *         or the security manager's <tt>checkAccess</tt> method
     *         denies access.
     */
    void shutdown();

    /**
     * Attempts to stop all actively executing tasks, halts the
     * processing of waiting tasks, and returns a list of the tasks
     * that were awaiting execution.
     *
     尝试停止所有已执行的任务,和等待执行的任务,返回等待执行任务的列表清单。
     * <p>This method does not wait for actively executing tasks to
     * terminate.  Use {@link #awaitTermination awaitTermination} to
     * do that.
     此方法不会等待已执行的任务结束,我们可以用awaitTermination方法等待这些线程执行完。
     * <p>There are no guarantees beyond best-effort attempts to stop
     * processing actively executing tasks.  For example, typical
     * implementations will cancel via {@link Thread#interrupt}, so any
     * task that fails to respond to interrupts may never terminate.
     *

     * @return list of tasks that never commenced execution
     * @throws SecurityException if a security manager exists and
     *         shutting down this ExecutorService may manipulate
     *         threads that the caller is not permitted to modify
     *         because it does not hold {@link
     *         java.lang.RuntimePermission}<tt>("modifyThread")</tt>,
     *         or the security manager's <tt>checkAccess</tt> method
     *         denies access.
     */
    List<Runnable> shutdownNow();

    /**
     * Returns <tt>true</tt> if this executor has been shut down.
     *执行器如果关闭,则返回true
     * @return <tt>true</tt> if this executor has been shut down
     */
    boolean isShutdown();

    /**
     * Returns <tt>true</tt> if all tasks have completed following shut down.
     * Note that <tt>isTerminated</tt> is never <tt>true</tt> unless
     * either <tt>shutdown</tt> or <tt>shutdownNow</tt> was called first.
     *
     如果所有任务在关闭之后都执行完,则返回true。需要注意的是,除非shutdown和
     shutdownNow在之前配被调用过,否则isTerminated不会返回true。
     * @return <tt>true</tt> if all tasks have completed following shut down
     */
    boolean isTerminated();

    /**
     * Blocks until all tasks have completed execution after a shutdown
     * request, or the timeout occurs, or the current thread is
     * interrupted, whichever happens first.
     *
    awaitTermination调用阻塞至在一个关闭请求后,所有任务已经执行完,
    或超时发生,或当前线程被中断。

     * @param timeout the maximum time to wait
     * @param unit the time unit of the timeout argument
     * @return <tt>true</tt> if this executor terminated and
     *         <tt>false</tt> if the timeout elapsed before termination
     * @throws InterruptedException if interrupted while waiting
     执行器结束返回true,在结束之前超时返回fasle,在等待过程中,如果中断,则抛出异常。
     */
    boolean awaitTermination(long timeout, TimeUnit unit)
        throws InterruptedException;


    /**
     * Submits a value-returning task for execution and returns a
     * Future representing the pending results of the task. The
     * Future's <tt>get</tt> method will return the task's result upon
     * successful completion.
     *
     提交一个有返回值的任务(Callable<T>)到执行器,返回Future表示任务的结果。
     在任务成功完成后,Future的get,可以获取返回的值。
     * <p>
     * If you would like to immediately block waiting
     * for a task, you can use constructions of the form
     * <tt>result = exec.submit(aCallable).get();</tt>
     *
     如果你想立刻阻塞等待任务执行的结果,可以用提交任务是的构造形式
     * <p> Note: The {@link Executors} class includes a set of methods
     * that can convert some other common closure-like objects,
     * for example, {@link java.security.PrivilegedAction} to
     * {@link Callable} form so they can be submitted.
     *
     Executors有一些方法用于将一些类似闭包的对象转换为Callable,以便可以提交。
     * @param task the task to submit
     * @return a Future representing pending completion of the task
     * @throws RejectedExecutionException if the task cannot be
     *         scheduled for execution,如果任务不能被执行器调度,则抛出异常
     * @throws NullPointerException if the task is null
     */
    <T> Future<T> submit(Callable<T> task);

    /**
     * Submits a Runnable task for execution and returns a Future
     * representing that task. The Future's <tt>get</tt> method will
     * return the given result upon successful completion.
     *
     提交一个有返回值的任务(Runnable)到执行器,返回Future表示任务的结果。
     在任务成功完成后,Future的get,可以获取返回的值。
     * @param task the task to submit
     * @param result the result to return,result为任务执行的结果返回值
     * @return a Future representing pending completion of the task
     * @throws RejectedExecutionException if the task cannot be
     *         scheduled for execution
     * @throws NullPointerException if the task is null
     */
    <T> Future<T> submit(Runnable task, T result);

    /**
     * Submits a Runnable task for execution and returns a Future
     * representing that task. The Future's <tt>get</tt> method will
     * return <tt>null</tt> upon [i]successful[/i] completion.
     *
     提交一个有返回值的任务(Runnable)到执行器,返回Future表示任务的结果。
     在任务成功完成后,Future的get,获取返回的值为null。
     * @param task the task to submit
     * @return a Future representing pending completion of the task
     * @throws RejectedExecutionException if the task cannot be
     *         scheduled for execution
     * @throws NullPointerException if the task is null
     */
    Future<?> submit(Runnable task);

    /**
     * Executes the given tasks, returning a list of Futures holding
     * their status and results when all complete.
     * {@link Future#isDone} is <tt>true</tt> for each
     * element of the returned list.
     * Note that a [i]completed[/i] task could have
     * terminated either normally or by throwing an exception.
     * The results of this method are undefined if the given
     * collection is modified while this operation is in progress.
     *
     执行给定的集合任务,List<Future<T>> 表示在所有任务成功返回值后,返回
     的任务结果集合。需要注意的时,在一个任务成功执行完成时,任务可以正常结束,
     或者抛出一个异常。如果在集合任务执行的过程中,如果集合被修改,则
     返回的结果是不缺定的。

     * @param tasks the collection of tasks
     * @return A list of Futures representing the tasks, in the same
     *         sequential order as produced by the iterator for the
     *         given task list, each of which has completed.
     返回结果集中的Future与任务集合的iterator相同
     * @throws InterruptedException if interrupted while waiting, in
     *         which case unfinished tasks are cancelled.
     * @throws NullPointerException if tasks or any of its elements are <tt>null</tt>
     * @throws RejectedExecutionException if any task cannot be
     *         scheduled for execution
     */

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

    /**
     * Executes the given tasks, returning a list of Futures holding
     * their status and results
     * when all complete or the timeout expires, whichever happens first.
     * {@link Future#isDone} is <tt>true</tt> for each
     * element of the returned list.
     * Upon return, tasks that have not completed are cancelled.
     * Note that a [i]completed[/i] task could have
     * terminated either normally or by throwing an exception.
     * The results of this method are undefined if the given
     * collection is modified while this operation is in progress.
     *
     这个与上面invokeAll相同,是invokeAll的超时版本,不同的是,结果集的返回
     又增加一种情况,即超时。在结果集返回后,没完成任务将被取消。
     * @param tasks the collection of tasks
     * @param timeout the maximum time to wait
     * @param unit the time unit of the timeout argument
     * @return a list of Futures representing the tasks, in the same
     *         sequential order as produced by the iterator for the
     *         given task list. If the operation did not time out,
     *         each task will have completed. If it did time out, some
     *         of these tasks will not have completed.
     * @throws InterruptedException if interrupted while waiting, in
     *         which case unfinished tasks are cancelled
     * @throws NullPointerException if tasks, any of its elements, or
     *         unit are <tt>null</tt>
     * @throws RejectedExecutionException if any task cannot be scheduled
     *         for execution
     */
    <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks,
                                  long timeout, TimeUnit unit)
        throws InterruptedException;

    /**
     * Executes the given tasks, returning the result
     * of one that has completed successfully (i.e., without throwing
     * an exception), if any do. Upon normal or exceptional return,
     * tasks that have not completed are cancelled.
     * The results of this method are undefined if the given
     * collection is modified while this operation is in progress.
     *
     执行给定的集合任务,当集合任务其中一个任务在没有抛出异常的情况下,
     完成时,则返回结果。在正常返回和异常返回时,未完成的任务将会被取消。
     如果在集合任务执行的过程中,如果集合被修改,则返回的结果是不缺定的。
     * @param tasks the collection of tasks
     * @return the result returned by one of the tasks
     * @throws InterruptedException if interrupted while waiting
     * @throws NullPointerException if tasks or any element task
     *         subject to execution is <tt>null</tt>
     * @throws IllegalArgumentException if tasks is empty
     * @throws ExecutionException if no task successfully completes
     * @throws RejectedExecutionException if tasks cannot be scheduled
     *         for execution
     */
    <T> T invokeAny(Collection<? extends Callable<T>> tasks)
        throws InterruptedException, ExecutionException;

    /**
     * Executes the given tasks, returning the result
     * of one that has completed successfully (i.e., without throwing
     * an exception), if any do before the given timeout elapses.
     * Upon normal or exceptional return, tasks that have not
     * completed are cancelled.
     * The results of this method are undefined if the given
     * collection is modified while this operation is in progress.
     *
     此方法为invokeAny的超时版本,不同的时,在结果集返回时,增加
     一种情况为超时。
     * @param tasks the collection of tasks
     * @param timeout the maximum time to wait
     * @param unit the time unit of the timeout argument
     * @return the result returned by one of the tasks.
     * @throws InterruptedException if interrupted while waiting
     * @throws NullPointerException if tasks, or unit, or any element
     *         task subject to execution is <tt>null</tt>
     * @throws TimeoutException if the given timeout elapses before
     *         any task successfully completes
     * @throws ExecutionException if no task successfully completes
     * @throws RejectedExecutionException if tasks cannot be scheduled
     *         for execution
     */
    <T> T invokeAny(Collection<? extends Callable<T>> tasks,
                    long timeout, TimeUnit unit)
        throws InterruptedException, ExecutionException, TimeoutException;
}
0
0
分享到:
评论

相关推荐

    ThreadPool.zip

    ExecutorService接口定义了线程池的基本操作,如提交任务、关闭线程池等。而ThreadPoolExecutor则是具体实现,允许我们自定义线程池的配置,如核心线程数、最大线程数、工作队列容量以及超时策略等。 在ThreadPool....

    Executor,Executors,ExecutorService比较.docx

    总结来说,`Executor`定义了任务执行的基本行为,`Executors`是创建线程池的工厂,而`ExecutorService`则提供了管理和控制线程池的能力。在实际编程中,我们通常通过`Executors`创建线程池,然后利用`...

    Java并发之线程池Executor框架的深入理解

    ExecutorService接口定义了对Executor的服务, ScheduledExecutorService接口定义了定时调度接口,而AbstractExecutorService抽象类则是执行框架的抽象实现。 ThreadPoolExecutor是JDK中线程池的具体实现,提供了一...

    java ExecutorService使用方法详解

    在Java的`java.util.concurrent`包中,`ExecutorService`接口作为线程池的核心接口,提供了启动、关闭线程池以及管理和调度线程的能力。下面将详细讲解`ExecutorService`的使用方法。 1. **线程池创建** `...

    java并发编程:Executor、Executors、ExecutorService.docx

    Executor是一个接口,它定义了一个核心方法`executor(Runnable command)`,用于接收实现了Runnable接口的任务对象并执行。Executor的主要目的是抽象出线程的创建和管理,让开发者只需关注任务本身,而无需关心线程的...

    实现Runnable接口的小程序

    在Java的`java.lang`包中,Runnable接口定义了一个方法:`void run()`。任何类实现这个接口并重写`run()`方法,都可以成为一个可执行的任务。当这个任务被放入Thread对象中并启动时,`run()`方法会被执行。 创建一...

    线程池核心组件源码剖析.docx

    2. **ExecutorService接口**:继承自Executor接口,增加了管理和控制线程池的功能,如`submit()`用于提交任务,`shutdown()`用于关闭线程池,`shutdownNow()`用于尝试停止所有正在执行的任务等。 3. **...

    java.util.concurrent.uml.pdf

    AbstractExecutorService是一个抽象类,实现了ExecutorService接口,并提供了一些默认实现,以便于子类进行更具体的实现。 ThreadPoolExecutor是一个核心的线程池实现,它通过线程池参数配置来管理执行任务。它实现...

    java 中Executor, ExecutorService 和 Executors 间的不同

    这是一个抽象层面的核心接口,定义了 execute 方法,用于执行 Runnable 任务。与 java.lang.Thread 类不同的是,Executor 将任务本身和执行任务分离,可以阅读 difference between Thread and Executor 来了解 ...

    java多线程并发executorservice(任务调度)类

    `ExecutorService` 是 Java 并发包 `java.util.concurrent` 中的一个接口,它提供了线程池服务,能够管理和控制线程的执行。而 `ScheduledExecutorService` 是 `ExecutorService` 的子接口,增加了定时及周期性任务...

    第20章 Part5 并发工具执行器与线程池.pdf

    而ExecutorService接口则扩展了Executor,它提供了更加丰富的方法来管理任务,包括执行程序的生命周期管理,如启动和停止执行器服务。 ExecutorService接口的实现类 ThreadPoolExecutor 是线程池的核心实现,它能够...

    Callable接口源码阅读1

    例如,如果任务的结果是一个字符串,你可以定义`Callable&lt;String&gt;`,这意味着`call()`方法将返回一个String对象。 3. **函数式接口** Callable接口被标记为一个函数式接口,这意味着它可以被lambda表达式或者方法...

    Android使用回调接口下载图片

    1. **回调接口**:回调接口是Java设计模式中的一个概念,通过定义一个接口,让调用者在执行某项任务时提供一个实现该接口的对象,当任务完成时,被调用者会通过这个对象的接口方法通知调用者。在Android中,通常用...

    接口课程设计(倒计时钟)的设计与实现

    在计算机科学中,接口定义了不同组件之间交互的方式,它是一种规范,规定了类或模块必须提供的服务。在Java等面向对象的语言中,接口通常通过定义一组抽象方法来实现,这些方法由实现该接口的类来具体实现。在倒计时...

    实现Runnable接口创建多线程.docx

    `Runnable`接口在`java.lang`包中定义,它只有一个抽象方法`run()`。任何实现`Runnable`接口的类都必须提供这个方法的具体实现。`run()`方法是线程执行的核心,里面包含线程需要执行的任务。 在案例10-1中,我们...

    Java多线程之Callable接口的实现

    ExecutorService接口提供了submit()方法,可以提交Callable任务,并返回一个Future对象。例如: ExecutorService exec = Executors.newCachedThreadPool(); Future&lt;Integer&gt; future = exec.submit(new ...

    java封装接口智能交通DEMO

    Java的Thread类和ExecutorService接口是实现多线程的关键。 5. **数据解析与存储**:接收到的监控数据可能需要解析成结构化数据,这可能涉及JSON或XML解析。解析后的数据可能存储在数据库中,如MySQL、MongoDB等,...

    移动mas机API接口说明(java)

    开发者应详细阅读并遵循其中的接口定义、参数说明和返回值描述。 总结,移动MAS机API接口在Java中的使用涉及多个方面,包括Java语言基础、网络编程、并发控制、安全策略等。开发者需要综合运用这些知识,才能有效地...

    java编程接口手册

    1. **Java类库**:Java类库是Java平台的核心组成部分,包含了各种预定义的类和接口,如集合框架、I/O流、网络编程、多线程、反射等。开发者可以利用这些类库快速构建功能丰富的应用。 2. **包**:Java中的包是命名...

    【java学习记录】11.多线程实现阶乘计算(Thread类和Runnable接口)

    例如,如果同时计算多个阶乘,可以考虑使用`ExecutorService`来管理线程池,以控制并发程度和资源消耗。 总结来说,Java中的`Thread`类和`Runnable`接口提供了两种创建多线程的方式,它们都可用于实现阶乘计算。...

Global site tag (gtag.js) - Google Analytics