6620549: ExecutorService#shutdown should clearly state that it does not block
Reviewed-by: dholmes
Contributed-by: Doug Lea <dl@cs.oswego.edu>
--- a/jdk/src/share/classes/java/util/concurrent/ExecutorService.java Mon Mar 10 23:23:47 2008 -0700
+++ b/jdk/src/share/classes/java/util/concurrent/ExecutorService.java Mon Mar 10 23:23:47 2008 -0700
@@ -145,6 +145,10 @@
* 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.
+ *
* @throws SecurityException if a security manager exists and
* shutting down this ExecutorService may manipulate
* threads that the caller is not permitted to modify
@@ -157,8 +161,12 @@
/**
* Attempts to stop all actively executing tasks, halts the
- * processing of waiting tasks, and returns a list of the tasks that were
- * awaiting execution.
+ * 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.
*
* <p>There are no guarantees beyond best-effort attempts to stop
* processing actively executing tasks. For example, typical
--- a/jdk/src/share/classes/java/util/concurrent/ScheduledThreadPoolExecutor.java Mon Mar 10 23:23:47 2008 -0700
+++ b/jdk/src/share/classes/java/util/concurrent/ScheduledThreadPoolExecutor.java Mon Mar 10 23:23:47 2008 -0700
@@ -702,13 +702,19 @@
/**
* Initiates an orderly shutdown in which previously submitted
- * tasks are executed, but no new tasks will be accepted. If the
- * {@code ExecuteExistingDelayedTasksAfterShutdownPolicy} has
- * been set {@code false}, existing delayed tasks whose delays
- * have not yet elapsed are cancelled. And unless the
- * {@code ContinueExistingPeriodicTasksAfterShutdownPolicy} has
- * been set {@code true}, future executions of existing periodic
- * tasks will be cancelled.
+ * 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.
+ *
+ * <p>If the {@code ExecuteExistingDelayedTasksAfterShutdownPolicy}
+ * has been set {@code false}, existing delayed tasks whose delays
+ * have not yet elapsed are cancelled. And unless the {@code
+ * ContinueExistingPeriodicTasksAfterShutdownPolicy} has been set
+ * {@code true}, future executions of existing periodic tasks will
+ * be cancelled.
*
* @throws SecurityException {@inheritDoc}
*/
@@ -721,6 +727,10 @@
* 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.
+ *
* <p>There are no guarantees beyond best-effort attempts to stop
* processing actively executing tasks. This implementation
* cancels tasks via {@link Thread#interrupt}, so any task that
--- a/jdk/src/share/classes/java/util/concurrent/ThreadPoolExecutor.java Mon Mar 10 23:23:47 2008 -0700
+++ b/jdk/src/share/classes/java/util/concurrent/ThreadPoolExecutor.java Mon Mar 10 23:23:47 2008 -0700
@@ -1342,6 +1342,10 @@
* 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.
+ *
* @throws SecurityException {@inheritDoc}
*/
public void shutdown() {
@@ -1364,6 +1368,10 @@
* that were awaiting execution. These tasks are drained (removed)
* from the task queue upon return from this method.
*
+ * <p>This method does not wait for actively executing tasks to
+ * terminate. Use {@link #awaitTermination awaitTermination} to
+ * do that.
+ *
* <p>There are no guarantees beyond best-effort attempts to stop
* processing actively executing tasks. This implementation
* cancels tasks via {@link Thread#interrupt}, so any task that