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; }
ExecutorService接口定义
Executor接口的定义:
http://donald-draper.iteye.com/blog/2365625
猜你喜欢
转载自donald-draper.iteye.com/blog/2365738
今日推荐
周排行