18 |
|
* lighter weight than a normal thread. Huge numbers of tasks and |
19 |
|
* subtasks may be hosted by a small number of actual threads in a |
20 |
|
* ForkJoinPool, at the price of some usage limitations. |
21 |
< |
* |
21 |
> |
* |
22 |
|
* <p> A "main" ForkJoinTask begins execution when submitted to a |
23 |
|
* {@link ForkJoinPool}. Once started, it will usually in turn start |
24 |
|
* other subtasks. As indicated by the name of this class, many |
28 |
|
* of other methods that can come into play in advanced usages, as |
29 |
|
* well as extension mechanics that allow support of new forms of |
30 |
|
* fork/join processing. |
31 |
< |
* |
31 |
> |
* |
32 |
|
* <p>A ForkJoinTask is a lightweight form of {@link Future}. The |
33 |
|
* efficiency of ForkJoinTasks stems from a set of restrictions (that |
34 |
|
* are only partially statically enforceable) reflecting their |
82 |
|
* instances of different task subclasses to call each others |
83 |
|
* methods), some of them may only be called from within other |
84 |
|
* ForkJoinTasks. Attempts to invoke them in other contexts result in |
85 |
< |
* exceptions or errors including ClassCastException. |
85 |
> |
* exceptions or errors possibly including ClassCastException. |
86 |
|
* |
87 |
|
* <p>Most base support methods are <code>final</code> because their |
88 |
|
* implementations are intrinsically tied to the underlying |
475 |
|
* than once unless it has completed and been reinitialized. This |
476 |
|
* method may be invoked only from within ForkJoinTask |
477 |
|
* computations. Attempts to invoke in other contexts result in |
478 |
< |
* exceptions or errors including ClassCastException. |
478 |
> |
* exceptions or errors possibly including ClassCastException. |
479 |
|
*/ |
480 |
|
public final void fork() { |
481 |
|
((ForkJoinWorkerThread)(Thread.currentThread())).pushTask(this); |
515 |
|
* both of them or an exception is encountered. This method may be |
516 |
|
* invoked only from within ForkJoinTask computations. Attempts to |
517 |
|
* invoke in other contexts result in exceptions or errors |
518 |
< |
* including ClassCastException. |
518 |
> |
* possibly including ClassCastException. |
519 |
|
* @param t1 one task |
520 |
|
* @param t2 the other task |
521 |
|
* @throws NullPointerException if t1 or t2 are null |
532 |
|
* for all of them. If any task encounters an exception, others |
533 |
|
* may be cancelled. This method may be invoked only from within |
534 |
|
* ForkJoinTask computations. Attempts to invoke in other contexts |
535 |
< |
* result in exceptions or errors including ClassCastException. |
535 |
> |
* result in exceptions or errors possibly including ClassCastException. |
536 |
|
* @param tasks the array of tasks |
537 |
|
* @throws NullPointerException if tasks or any element are null. |
538 |
|
* @throws RuntimeException or Error if any task did so. |
576 |
|
* encounters an exception, others may be cancelled. This method |
577 |
|
* may be invoked only from within ForkJoinTask |
578 |
|
* computations. Attempts to invoke in other contexts resul!t in |
579 |
< |
* exceptions or errors including ClassCastException. |
579 |
> |
* exceptions or errors possibly including ClassCastException. |
580 |
|
* @param tasks the collection of tasks |
581 |
|
* @throws NullPointerException if tasks or any element are null. |
582 |
|
* @throws RuntimeException or Error if any task did so. |
758 |
|
* while helping. (This usually holds for pure divide-and-conquer |
759 |
|
* tasks). This method may be invoked only from within |
760 |
|
* ForkJoinTask computations. Attempts to invoke in other contexts |
761 |
< |
* resul!t in exceptions or errors including ClassCastException. |
761 |
> |
* resul!t in exceptions or errors possibly including ClassCastException. |
762 |
|
* @return the computed result |
763 |
|
*/ |
764 |
|
public final V helpJoin() { |
772 |
|
* Possibly executes other tasks until this task is ready. This |
773 |
|
* method may be invoked only from within ForkJoinTask |
774 |
|
* computations. Attempts to invoke in other contexts resul!t in |
775 |
< |
* exceptions or errors including ClassCastException. |
775 |
> |
* exceptions or errors possibly including ClassCastException. |
776 |
|
*/ |
777 |
|
public final void quietlyHelpJoin() { |
778 |
|
if (status >= 0) { |
855 |
|
* alternative local processing of tasks that could have been, but |
856 |
|
* were not, stolen. This method may be invoked only from within |
857 |
|
* ForkJoinTask computations. Attempts to invoke in other contexts |
858 |
< |
* result in exceptions or errors including ClassCastException. |
858 |
> |
* result in exceptions or errors possibly including ClassCastException. |
859 |
|
* @return true if unforked |
860 |
|
*/ |
861 |
|
public boolean tryUnfork() { |
932 |
|
* actually be polled or executed next. |
933 |
|
* This method is designed primarily to support extensions, |
934 |
|
* and is unlikely to be useful otherwise. |
935 |
+ |
* This method may be invoked only from within |
936 |
+ |
* ForkJoinTask computations. Attempts to invoke in other contexts |
937 |
+ |
* result in exceptions or errors possibly including ClassCastException. |
938 |
|
* |
939 |
|
* @return the next task, or null if none are available |
940 |
|
*/ |
947 |
|
* recently forked by the current thread but not yet executed. |
948 |
|
* This method is designed primarily to support extensions, |
949 |
|
* and is unlikely to be useful otherwise. |
950 |
+ |
* This method may be invoked only from within |
951 |
+ |
* ForkJoinTask computations. Attempts to invoke in other contexts |
952 |
+ |
* result in exceptions or errors possibly including ClassCastException. |
953 |
|
* |
954 |
|
* @return the next task, or null if none are available |
955 |
|
*/ |
963 |
|
* one is available, or if not available, a task that was forked |
964 |
|
* by some other thread, if available. Availability may be |
965 |
|
* transient, so a <code>null</code> result does not necessarily |
966 |
< |
* imply quiecence of the pool this task is operating in. |
966 |
> |
* imply quiecence of the pool this task is operating in. |
967 |
|
* This method is designed primarily to support extensions, |
968 |
|
* and is unlikely to be useful otherwise. |
969 |
< |
* |
969 |
> |
* This method may be invoked only from within |
970 |
> |
* ForkJoinTask computations. Attempts to invoke in other contexts |
971 |
> |
* result in exceptions or errors possibly including ClassCastException. |
972 |
> |
* |
973 |
|
* @return a task, or null if none are available |
974 |
|
*/ |
975 |
|
protected static ForkJoinTask<?> pollTask() { |
976 |
|
return ((ForkJoinWorkerThread)(Thread.currentThread())). |
977 |
< |
pollLocalOrStolenTask(); |
977 |
> |
pollTask(); |
978 |
|
} |
979 |
|
|
980 |
|
// Serialization support |