548 |
|
* Common code for execute, invoke and submit |
549 |
|
*/ |
550 |
|
private <T> void doSubmit(ForkJoinTask<T> task) { |
551 |
+ |
if (task == null) |
552 |
+ |
throw new NullPointerException(); |
553 |
|
if (isShutdown()) |
554 |
|
throw new RejectedExecutionException(); |
555 |
|
if (workers == null) |
585 |
|
// AbstractExecutorService methods |
586 |
|
|
587 |
|
public void execute(Runnable task) { |
588 |
< |
doSubmit(new AdaptedRunnable<Void>(task, null)); |
588 |
> |
ForkJoinTask<?> job; |
589 |
> |
if (task instanceof AdaptedCallable) // avoid re-wrap |
590 |
> |
job = (AdaptedCallable<?>)task; |
591 |
> |
else if (task instanceof AdaptedRunnable) |
592 |
> |
job = (AdaptedRunnable<?>)task; |
593 |
> |
else |
594 |
> |
job = new AdaptedRunnable<Void>(task, null); |
595 |
> |
doSubmit(job); |
596 |
|
} |
597 |
|
|
598 |
|
public <T> ForkJoinTask<T> submit(Callable<T> task) { |
608 |
|
} |
609 |
|
|
610 |
|
public ForkJoinTask<?> submit(Runnable task) { |
611 |
< |
ForkJoinTask<Void> job = new AdaptedRunnable<Void>(task, null); |
611 |
> |
ForkJoinTask<?> job; |
612 |
> |
if (task instanceof AdaptedCallable) // avoid re-wrap |
613 |
> |
job = (AdaptedCallable<?>)task; |
614 |
> |
else if (task instanceof AdaptedRunnable) |
615 |
> |
job = (AdaptedRunnable<?>)task; |
616 |
> |
else |
617 |
> |
job = new AdaptedRunnable<Void>(task, null); |
618 |
|
doSubmit(job); |
619 |
|
return job; |
620 |
|
} |
621 |
|
|
622 |
|
/** |
623 |
+ |
* Submits a ForkJoinTask for execution. |
624 |
+ |
* |
625 |
+ |
* @param task the task to submit |
626 |
+ |
* @return the task |
627 |
+ |
* @throws RejectedExecutionException if the task cannot be |
628 |
+ |
* scheduled for execution |
629 |
+ |
* @throws NullPointerException if the task is null |
630 |
+ |
*/ |
631 |
+ |
public <T> ForkJoinTask<T> submit(ForkJoinTask<T> task) { |
632 |
+ |
doSubmit(task); |
633 |
+ |
return task; |
634 |
+ |
} |
635 |
+ |
|
636 |
+ |
/** |
637 |
|
* Adaptor for Runnables. This implements RunnableFuture |
638 |
|
* to be compliant with AbstractExecutorService constraints. |
639 |
|
*/ |