2425 |
|
} |
2426 |
|
|
2427 |
|
/** |
2428 |
+ |
* Push a possibly-external submission |
2429 |
+ |
*/ |
2430 |
+ |
final <T> ForkJoinTask<T> doSubmit(ForkJoinTask<T> task) { |
2431 |
+ |
Thread t; ForkJoinWorkerThread w; |
2432 |
+ |
if (task == null) |
2433 |
+ |
throw new NullPointerException(); |
2434 |
+ |
if (((t = Thread.currentThread()) instanceof ForkJoinWorkerThread) && |
2435 |
+ |
(w = (ForkJoinWorkerThread)t).pool == this) |
2436 |
+ |
w.workQueue.push(task); |
2437 |
+ |
else |
2438 |
+ |
externalPush(task); |
2439 |
+ |
return task; |
2440 |
+ |
} |
2441 |
+ |
|
2442 |
+ |
/** |
2443 |
|
* Returns common pool queue for an external thread. |
2444 |
|
*/ |
2445 |
|
static WorkQueue commonSubmitterQueue() { |
2632 |
|
public <T> T invoke(ForkJoinTask<T> task) { |
2633 |
|
if (task == null) |
2634 |
|
throw new NullPointerException(); |
2635 |
< |
externalPush(task); |
2635 |
> |
doSubmit(task); |
2636 |
|
return task.join(); |
2637 |
|
} |
2638 |
|
|
2645 |
|
* scheduled for execution |
2646 |
|
*/ |
2647 |
|
public void execute(ForkJoinTask<?> task) { |
2648 |
< |
if (task == null) |
2634 |
< |
throw new NullPointerException(); |
2635 |
< |
externalPush(task); |
2648 |
> |
doSubmit(task); |
2649 |
|
} |
2650 |
|
|
2651 |
|
// AbstractExecutorService methods |
2663 |
|
job = (ForkJoinTask<?>) task; |
2664 |
|
else |
2665 |
|
job = new ForkJoinTask.RunnableExecuteAction(task); |
2666 |
< |
externalPush(job); |
2666 |
> |
doSubmit(job); |
2667 |
|
} |
2668 |
|
|
2669 |
|
/** |
2677 |
|
* scheduled for execution |
2678 |
|
*/ |
2679 |
|
public <T> ForkJoinTask<T> submit(ForkJoinTask<T> task) { |
2680 |
< |
if (task == null) |
2668 |
< |
throw new NullPointerException(); |
2669 |
< |
externalPush(task); |
2670 |
< |
return task; |
2680 |
> |
return doSubmit(task); |
2681 |
|
} |
2682 |
|
|
2683 |
|
/** |
2686 |
|
* scheduled for execution |
2687 |
|
*/ |
2688 |
|
public <T> ForkJoinTask<T> submit(Callable<T> task) { |
2689 |
< |
ForkJoinTask<T> job = new ForkJoinTask.AdaptedCallable<T>(task); |
2680 |
< |
externalPush(job); |
2681 |
< |
return job; |
2689 |
> |
return doSubmit(new ForkJoinTask.AdaptedCallable<T>(task)); |
2690 |
|
} |
2691 |
|
|
2692 |
|
/** |
2695 |
|
* scheduled for execution |
2696 |
|
*/ |
2697 |
|
public <T> ForkJoinTask<T> submit(Runnable task, T result) { |
2698 |
< |
ForkJoinTask<T> job = new ForkJoinTask.AdaptedRunnable<T>(task, result); |
2691 |
< |
externalPush(job); |
2692 |
< |
return job; |
2698 |
> |
return doSubmit(new ForkJoinTask.AdaptedRunnable<T>(task, result)); |
2699 |
|
} |
2700 |
|
|
2701 |
|
/** |
2711 |
|
job = (ForkJoinTask<?>) task; |
2712 |
|
else |
2713 |
|
job = new ForkJoinTask.AdaptedRunnableAction(task); |
2714 |
< |
externalPush(job); |
2709 |
< |
return job; |
2714 |
> |
return doSubmit(job); |
2715 |
|
} |
2716 |
|
|
2717 |
|
/** |
2728 |
|
for (Callable<T> t : tasks) { |
2729 |
|
ForkJoinTask<T> f = new ForkJoinTask.AdaptedCallable<T>(t); |
2730 |
|
futures.add(f); |
2731 |
< |
externalPush(f); |
2731 |
> |
doSubmit(f); |
2732 |
|
} |
2733 |
|
for (int i = 0, size = futures.size(); i < size; i++) |
2734 |
|
((ForkJoinTask<?>)futures.get(i)).quietlyJoin(); |