--- jsr166/src/jsr166y/ForkJoinTask.java 2009/08/04 20:24:54 1.37 +++ jsr166/src/jsr166y/ForkJoinTask.java 2009/10/22 08:19:44 1.45 @@ -56,9 +56,9 @@ import java.util.WeakHashMap; * exceptions such as {@code IOExceptions} to be thrown. However, * computations may still encounter unchecked exceptions, that are * rethrown to callers attempting to join them. These exceptions may - * additionally include RejectedExecutionExceptions stemming from - * internal resource exhaustion such as failure to allocate internal - * task queues. + * additionally include {@link RejectedExecutionException} stemming + * from internal resource exhaustion, such as failure to allocate + * internal task queues. * *

The primary method for awaiting completion and extracting * results of a task is {@link #join}, but there are several variants: @@ -80,16 +80,14 @@ import java.util.WeakHashMap; *

The execution status of tasks may be queried at several levels * of detail: {@link #isDone} is true if a task completed in any way * (including the case where a task was cancelled without executing); - * {@link #isCancelled} is true if completion was due to cancellation; * {@link #isCompletedNormally} is true if a task completed without - * cancellation or encountering an exception; {@link - * #isCompletedExceptionally} is true if if the task encountered an - * exception (in which case {@link #getException} returns the - * exception); {@link #isCancelled} is true if the task was cancelled - * (in which case {@link #getException} returns a {@link - * java.util.concurrent.CancellationException}); and {@link - * #isCompletedAbnormally} is true if a task was either cancelled or - * encountered an exception. + * cancellation or encountering an exception; {@link #isCancelled} is + * true if the task was cancelled (in which case {@link #getException} + * returns a {@link java.util.concurrent.CancellationException}); and + * {@link #isCompletedAbnormally} is true if a task was either + * cancelled or encountered an exception, in which case {@link + * #getException} will return either the encountered exception or + * {@link java.util.concurrent.CancellationException}. * *

The ForkJoinTask class is not usually directly subclassed. * Instead, you subclass one of the abstract classes that support a @@ -392,7 +390,8 @@ public abstract class ForkJoinTask im /** * Returns result or throws exception using j.u.c.Future conventions. - * Only call when {@code isDone} known to be true. + * Only call when {@code isDone} known to be true or thread known + * to be interrupted. */ private V reportFutureResult() throws InterruptedException, ExecutionException { @@ -512,6 +511,11 @@ public abstract class ForkJoinTask im * Arranges to asynchronously execute this task. While it is not * necessarily enforced, it is a usage error to fork a task more * than once unless it has completed and been reinitialized. + * Subsequent modifications to the state of this task or any data + * it operates on are not necessarily consistently observable by + * any thread other than the one executing it unless preceded by a + * call to {@link #join} or related methods, or a call to {@link + * #isDone} returning {@code true}. * *

This method may be invoked only from within {@code * ForkJoinTask} computations (as may be determined using method @@ -528,7 +532,7 @@ public abstract class ForkJoinTask im } /** - * Returns the result of the computation when it is ready. + * Returns the result of the computation when it {@link #isDone is done}. * This method differs from {@link #get()} in that * abnormal completion results in {@code RuntimeException} or * {@code Error}, not {@code ExecutionException}. @@ -559,9 +563,10 @@ public abstract class ForkJoinTask im /** * Forks the given tasks, returning when {@code isDone} holds for * each task or an (unchecked) exception is encountered, in which - * case the exception is rethrown. If more than one task - * encounters an exception, then this method throws any one of - * these exceptions. The individual status of each task may be + * case the exception is rethrown. If either task encounters an + * exception, the other one may be, but is not guaranteed to be, + * cancelled. If both tasks throw an exception, then this method + * throws one of them. The individual status of each task may be * checked using {@link #getException()} and related methods. * *

This method may be invoked only from within {@code @@ -724,21 +729,10 @@ public abstract class ForkJoinTask im return (status & COMPLETION_MASK) == CANCELLED; } - /** - * Returns {@code true} if the computation performed by this task - * has completed (or has been cancelled). - * - * @return {@code true} if this computation has completed - */ public final boolean isDone() { return status < 0; } - /** - * Returns {@code true} if this task was cancelled. - * - * @return {@code true} if this task was cancelled - */ public final boolean isCancelled() { return (status & COMPLETION_MASK) == CANCELLED; } @@ -764,15 +758,6 @@ public abstract class ForkJoinTask im } /** - * Returns {@code true} if this task threw an exception. - * - * @return {@code true} if this task threw an exception - */ - public final boolean isCompletedExceptionally() { - return (status & COMPLETION_MASK) == EXCEPTIONAL; - } - - /** * Returns the exception thrown by the base computation, or a * {@code CancellationException} if cancelled, or {@code null} if * none or if the method has not yet completed. @@ -796,9 +781,9 @@ public abstract class ForkJoinTask im * overridable, but overridden versions must invoke {@code super} * implementation to maintain guarantees. * - * @param ex the exception to throw. If this exception is - * not a RuntimeException or Error, the actual exception thrown - * will be a RuntimeException with cause ex. + * @param ex the exception to throw. If this exception is not a + * {@code RuntimeException} or {@code Error}, the actual exception + * thrown will be a {@code RuntimeException} with cause {@code ex}. */ public void completeExceptionally(Throwable ex) { setDoneExceptionally((ex instanceof RuntimeException) || @@ -845,13 +830,13 @@ public abstract class ForkJoinTask im } /** - * Possibly executes other tasks until this task is ready, then - * returns the result of the computation. This method may be more - * efficient than {@code join}, but is only applicable when - * there are no potential dependencies between continuation of the - * current task and that of any other task that might be executed - * while helping. (This usually holds for pure divide-and-conquer - * tasks). + * Possibly executes other tasks until this task {@link #isDone is + * done}, then returns the result of the computation. This method + * may be more efficient than {@code join}, but is only applicable + * when there are no potential dependencies between continuation + * of the current task and that of any other task that might be + * executed while helping. (This usually holds for pure + * divide-and-conquer tasks). * *

This method may be invoked only from within {@code * ForkJoinTask} computations (as may be determined using method @@ -869,9 +854,10 @@ public abstract class ForkJoinTask im } /** - * Possibly executes other tasks until this task is ready. This - * method may be useful when processing collections of tasks when - * some have been cancelled or otherwise known to have aborted. + * Possibly executes other tasks until this task {@link #isDone is + * done}. This method may be useful when processing collections + * of tasks when some have been cancelled or otherwise known to + * have aborted. * *

This method may be invoked only from within {@code * ForkJoinTask} computations (as may be determined using method @@ -1233,7 +1219,7 @@ public abstract class ForkJoinTask im private static final long serialVersionUID = -7721805057305804111L; /** - * Save the state to a stream. + * Saves the state to a stream. * * @serialData the current run status and the exception thrown * during execution, or {@code null} if none @@ -1246,7 +1232,7 @@ public abstract class ForkJoinTask im } /** - * Reconstitute the instance from a stream. + * Reconstitutes the instance from a stream. * * @param s the stream */