ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/main/java/util/concurrent/ExecutorService.java
Revision: 1.8
Committed: Wed Dec 10 01:51:11 2003 UTC (20 years, 5 months ago) by tim
Branch: MAIN
CVS Tags: JSR166_DEC9_POST_ES_SUBMIT
Changes since 1.7: +79 -0 lines
Log Message:
Move and rename static Executors.execute/invoke to ExecutorService.submit/invoke,
providing implementations in AbstractExecutorService (which TPE extends).

File Contents

# User Rev Content
1 dl 1.1 /*
2     * Written by Doug Lea with assistance from members of JCP JSR-166
3     * Expert Group and released to the public domain. Use, modify, and
4     * redistribute this code in any way without acknowledgement.
5     */
6    
7     package java.util.concurrent;
8    
9     import java.util.List;
10 tim 1.8 import java.security.PrivilegedAction;
11     import java.security.PrivilegedExceptionAction;
12 dl 1.1
13     /**
14 dl 1.7 * An <tt>Executor</tt> that provides methods to manage termination.
15     * An <tt>ExecutorService</tt> can be shut down, which will cause it
16     * to stop accepting new tasks. After being shut down, the executor
17     * will eventually terminate, at which point no tasks are actively
18 dl 1.1 * executing, no tasks are awaiting execution, and no new tasks can be
19     * submitted.
20     *
21 dl 1.7 * <p>The {@link Executors} class provides factory methods for the
22     * executor services provided in this package.
23 dl 1.1 *
24     * @since 1.5
25 dl 1.5 * @author Doug Lea
26 dl 1.1 */
27     public interface ExecutorService extends Executor {
28 tim 1.8
29     /**
30     * Submits a Runnable task for execution and returns a Future
31     * representing that task.
32     *
33     * @param task the task to submit
34     * @return a Future representing pending completion of the task,
35     * and whose <tt>get()</tt> method will return an arbitrary value
36     * upon completion
37     * @throws RejectedExecutionException if task cannot be scheduled
38     * for execution
39     */
40     Future<?> submit(Runnable task);
41    
42     /**
43     * Submits a value-returning task for execution and returns a Future
44     * representing the pending results of the task.
45     *
46     * @param task the task to submit
47     * @return a Future representing pending completion of the task
48     * @throws RejectedExecutionException if task cannot be scheduled
49     * for execution
50     */
51     <T> Future<T> submit(Callable<T> task);
52    
53     /**
54     * Executes a Runnable task and blocks until it completes normally
55     * or throws an exception.
56     *
57     * @param task the task to submit
58     * @throws RejectedExecutionException if task cannot be scheduled
59     * for execution
60     * @throws ExecutionException if the task encountered an exception
61     * while executing
62     */
63     void invoke(Runnable task) throws ExecutionException, InterruptedException;
64    
65     /**
66     * Executes a value-returning task and blocks until it returns a
67     * value or throws an exception.
68     *
69     * @param task the task to submit
70     * @return a Future representing pending completion of the task
71     * @throws RejectedExecutionException if task cannot be scheduled
72     * for execution
73     * @throws InterruptedException if interrupted while waiting for
74     * completion
75     * @throws ExecutionException if the task encountered an exception
76     * while executing
77     */
78     <T> T invoke(Callable<T> task) throws ExecutionException, InterruptedException;
79    
80    
81     /**
82     * Submits a privileged action for execution under the current
83     * access control context and returns a Future representing the
84     * pending result object of that action.
85     *
86     * @param action the action to submit
87     * @return a Future representing pending completion of the action
88     * @throws RejectedExecutionException if action cannot be scheduled
89     * for execution
90     */
91     Future<Object> submit(PrivilegedAction action);
92    
93     /**
94     * Submits a privileged exception action for execution under the current
95     * access control context and returns a Future representing the pending
96     * result object of that action.
97     *
98     * @param action the action to submit
99     * @return a Future representing pending completion of the action
100     * @throws RejectedExecutionException if action cannot be scheduled
101     * for execution
102     */
103     Future<Object> submit(PrivilegedExceptionAction action);
104    
105 dl 1.1
106     /**
107 dl 1.6 * Initiates an orderly shutdown in which previously submitted
108     * tasks are executed, but no new tasks will be
109     * accepted. Invocation has no additional effect if already shut
110     * down.
111 dl 1.1 *
112     */
113     void shutdown();
114    
115     /**
116     * Attempts to stop all actively executing tasks, halts the
117     * processing of waiting tasks, and returns a list of the tasks that were
118     * awaiting execution.
119     *
120     * <p>There are no guarantees beyond best-effort attempts to stop
121     * processing actively executing tasks. For example, typical
122     * implementations will cancel via {@link Thread#interrupt}, so if any
123     * tasks mask or fail to respond to interrupts, they may never terminate.
124     *
125     * @return list of tasks that never commenced execution
126     */
127     List shutdownNow();
128    
129     /**
130     * Returns <tt>true</tt> if this executor has been shut down.
131     *
132     * @return <tt>true</tt> if this executor has been shut down
133     */
134     boolean isShutdown();
135    
136     /**
137     * Returns <tt>true</tt> if all tasks have completed following shut down.
138     * Note that <tt>isTerminated</tt> is never <tt>true</tt> unless
139     * either <tt>shutdown</tt> or <tt>shutdownNow</tt> was called first.
140     *
141     * @return <tt>true</tt> if all tasks have completed following shut down
142     */
143     boolean isTerminated();
144    
145     /**
146     * Blocks until all tasks have completed execution after a shutdown
147     * request, or the timeout occurs, or the current thread is
148     * interrupted, whichever happens first.
149     *
150     * @param timeout the maximum time to wait
151     * @param unit the time unit of the timeout argument
152     * @return <tt>true</tt> if this executor terminated and <tt>false</tt>
153     * if the timeout elapsed before termination
154     * @throws InterruptedException if interrupted while waiting
155     */
156     boolean awaitTermination(long timeout, TimeUnit unit)
157     throws InterruptedException;
158 dl 1.3
159 dl 1.1 }