652 |
|
} |
653 |
|
|
654 |
|
public <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks) { |
655 |
< |
ArrayList<ForkJoinTask<T>> ts = |
655 |
> |
ArrayList<ForkJoinTask<T>> forkJoinTasks = |
656 |
|
new ArrayList<ForkJoinTask<T>>(tasks.size()); |
657 |
< |
for (Callable<T> c : tasks) |
658 |
< |
ts.add(new AdaptedCallable<T>(c)); |
659 |
< |
invoke(new InvokeAll<T>(ts)); |
660 |
< |
return (List<Future<T>>) (List) ts; |
657 |
> |
for (Callable<T> task : tasks) |
658 |
> |
forkJoinTasks.add(new AdaptedCallable<T>(task)); |
659 |
> |
invoke(new InvokeAll<T>(forkJoinTasks)); |
660 |
> |
|
661 |
> |
@SuppressWarnings({"unchecked", "rawtypes"}) |
662 |
> |
List<Future<T>> futures = (List<Future<T>>) (List) forkJoinTasks; |
663 |
> |
return futures; |
664 |
|
} |
665 |
|
|
666 |
|
static final class InvokeAll<T> extends RecursiveAction { |
1837 |
|
// AbstractExecutorService overrides |
1838 |
|
|
1839 |
|
protected <T> RunnableFuture<T> newTaskFor(Runnable runnable, T value) { |
1840 |
< |
return new AdaptedRunnable(runnable, value); |
1840 |
> |
return new AdaptedRunnable<T>(runnable, value); |
1841 |
|
} |
1842 |
|
|
1843 |
|
protected <T> RunnableFuture<T> newTaskFor(Callable<T> callable) { |
1844 |
< |
return new AdaptedCallable(callable); |
1844 |
> |
return new AdaptedCallable<T>(callable); |
1845 |
|
} |
1846 |
|
|
1847 |
|
|