--- jsr166/src/test/loops/BinaryAsyncAction.java 2012/11/25 21:44:38 1.9
+++ jsr166/src/test/loops/BinaryAsyncAction.java 2015/09/12 18:11:24 1.17
@@ -13,11 +13,11 @@ import java.util.concurrent.atomic.*;
* have smaller stack space footprints and faster completion mechanics
* but higher per-task footprints. Compared to LinkedAsyncActions,
* BinaryAsyncActions are simpler to use and have less overhead in
- * typical uasges but are restricted to binary computation trees.
+ * typical usages but are restricted to binary computation trees.
*
- *
Upon construction, an BinaryAsyncAction does not bear any
+ *
Upon construction, a BinaryAsyncAction does not bear any
* linkages. For non-root tasks, links must be established using
- * method linkSubtasks before use.
+ * method {@link #linkSubtasks} before use.
*
*
Sample Usage. A version of Fibonacci:
*
@@ -38,7 +38,7 @@ import java.util.concurrent.atomic.*;
* }
* }
*
- * An alternative, and usually faster strategy is to instead use a
+ * An alternative, and usually faster, strategy is to instead use a
* loop to fork subtasks:
*
* protected void compute() {
@@ -57,10 +57,6 @@ import java.util.concurrent.atomic.*;
*
*/
public abstract class BinaryAsyncAction extends ForkJoinTask {
- private volatile int controlState;
-
- static final AtomicIntegerFieldUpdater controlStateUpdater =
- AtomicIntegerFieldUpdater.newUpdater(BinaryAsyncAction.class, "controlState");
/**
* Parent to propagate completion; nulled after completion to
@@ -75,7 +71,7 @@ public abstract class BinaryAsyncAction
/**
* Creates a new action. Unless this is a root task, you will need
- * to link it using method linkSubtasks before forking as
+ * to link it using method {@link #linkSubtasks} before forking as
* a subtask.
*/
protected BinaryAsyncAction() {
@@ -89,7 +85,7 @@ public abstract class BinaryAsyncAction
* as parent, and each other as siblings.
* @param x one subtask
* @param y the other subtask
- * @throws NullPointerException if either argument is null.
+ * @throws NullPointerException if either argument is null
*/
public final void linkSubtasks(BinaryAsyncAction x, BinaryAsyncAction y) {
x.parent = y.parent = this;
@@ -98,9 +94,9 @@ public abstract class BinaryAsyncAction
}
/**
- * Overridable callback action triggered upon complete of
+ * Overridable callback action triggered upon {@code complete} of
* subtasks. Upon invocation, both subtasks have completed.
- * After return, this task isDone and is joinable by
+ * After return, this task {@code isDone} and is joinable by
* other tasks. The default version of this method does nothing.
* But it may be overridden in subclasses to perform some action
* (for example a reduction) when this task is completes.
@@ -112,22 +108,22 @@ public abstract class BinaryAsyncAction
/**
* Overridable callback action triggered by
- * completeExceptionally. Upon invocation, this task has
+ * {@code completeExceptionally}. Upon invocation, this task has
* aborted due to an exception (accessible via
- * getException). If this method returns true,
+ * {@code getException}). If this method returns {@code true},
* the exception propagates to the current task's
* parent. Otherwise, normal completion is propagated. The
* default version of this method does nothing and returns
- * true.
+ * {@code true}.
* @return true if this task's exception should be propagated to
- * this tasks parent.
+ * this task's parent
*/
protected boolean onException() {
return true;
}
/**
- * Equivalent in effect to invoking linkSubtasks and then
+ * Equivalent in effect to invoking {@link #linkSubtasks} and then
* forking both tasks.
* @param x one subtask
* @param y the other subtask
@@ -156,9 +152,9 @@ public abstract class BinaryAsyncAction
/**
* Completes this task, and if this task has a sibling that is
- * also complete, invokes onComplete of parent task, and so
+ * also complete, invokes {@code onComplete} of parent task, and so
* on. If an exception is encountered, tasks instead
- * completeExceptionally.
+ * {@code completeExceptionally}.
*/
public final void complete() {
// todo: Use tryUnfork without possibly blowing stack
@@ -169,7 +165,7 @@ public abstract class BinaryAsyncAction
a.sibling = null;
a.parent = null;
a.completeThis();
- if (p == null || p.compareAndSetControlState(0, 1))
+ if (p == null || p.markForkJoinTask())
break;
try {
p.onComplete(a, s);
@@ -184,15 +180,15 @@ public abstract class BinaryAsyncAction
/**
* Completes this task abnormally. Unless this task already
* cancelled or aborted, upon invocation, this method invokes
- * onException, and then, depending on its return value,
- * completees parent (if one exists) exceptionally or normally. To
+ * {@code onException}, and then, depending on its return value,
+ * completes parent (if one exists) exceptionally or normally. To
* avoid unbounded exception loops, this method aborts if an
- * exception is encountered in any onException
+ * exception is encountered in any {@code onException}
* invocation.
* @param ex the exception to throw when joining this task
* @throws NullPointerException if ex is null
* @throws Throwable if any invocation of
- * onException does so.
+ * {@code onException} does so
*/
public final void completeExceptionally(Throwable ex) {
BinaryAsyncAction a = this;
@@ -209,7 +205,7 @@ public abstract class BinaryAsyncAction
/**
* Returns this task's parent, or null if none or this task
* is already complete.
- * @return this task's parent, or null if none.
+ * @return this task's parent, or null if none
*/
public final BinaryAsyncAction getParent() {
return parent;
@@ -218,7 +214,7 @@ public abstract class BinaryAsyncAction
/**
* Returns this task's sibling, or null if none or this task is
* already complete.
- * @return this task's sibling, or null if none.
+ * @return this task's sibling, or null if none
*/
public BinaryAsyncAction getSibling() {
return sibling;
@@ -233,6 +229,8 @@ public abstract class BinaryAsyncAction
super.reinitialize();
}
+<<<<<<< BinaryAsyncAction.java
+=======
/**
* Gets the control state, which is initially zero, or negative if
* this task has completed or cancelled. Once negative, the value
@@ -267,7 +265,7 @@ public abstract class BinaryAsyncAction
}
/**
- * Sets the control state to the given value,
+ * Increments the control state.
* @param value the new value
*/
protected final void incrementControlState() {
@@ -275,11 +273,12 @@ public abstract class BinaryAsyncAction
}
/**
- * Decrement the control state
+ * Decrements the control state.
* @return true if successful
*/
protected final void decrementControlState() {
controlStateUpdater.decrementAndGet(this);
}
+>>>>>>> 1.14
}