27 |
|
* void solve(Executor e, |
28 |
|
* Collection<Callable<Result>> solvers) |
29 |
|
* throws InterruptedException, ExecutionException { |
30 |
< |
* CompletionService<Result> ecs |
30 |
> |
* CompletionService<Result> cs |
31 |
|
* = new ExecutorCompletionService<>(e); |
32 |
< |
* for (Callable<Result> s : solvers) |
33 |
< |
* ecs.submit(s); |
34 |
< |
* int n = solvers.size(); |
35 |
< |
* for (int i = 0; i < n; ++i) { |
36 |
< |
* Result r = ecs.take().get(); |
32 |
> |
* solvers.forEach((solver) -> cs.submit(solver)); |
33 |
> |
* for (int i = solvers.size(); i > 0; i--) { |
34 |
> |
* Result r = cs.take().get(); |
35 |
|
* if (r != null) |
36 |
|
* use(r); |
37 |
|
* } |
45 |
|
* void solve(Executor e, |
46 |
|
* Collection<Callable<Result>> solvers) |
47 |
|
* throws InterruptedException { |
48 |
< |
* CompletionService<Result> ecs |
48 |
> |
* CompletionService<Result> cs |
49 |
|
* = new ExecutorCompletionService<>(e); |
50 |
|
* int n = solvers.size(); |
51 |
|
* List<Future<Result>> futures = new ArrayList<>(n); |
52 |
|
* Result result = null; |
53 |
|
* try { |
54 |
< |
* for (Callable<Result> s : solvers) |
55 |
< |
* futures.add(ecs.submit(s)); |
58 |
< |
* for (int i = 0; i < n; ++i) { |
54 |
> |
* solvers.forEach((solver) -> futures.add(cs.submit(solver))); |
55 |
> |
* for (int i = n; i > 0; i--) { |
56 |
|
* try { |
57 |
< |
* Result r = ecs.take().get(); |
57 |
> |
* Result r = cs.take().get(); |
58 |
|
* if (r != null) { |
59 |
|
* result = r; |
60 |
|
* break; |
61 |
|
* } |
62 |
|
* } catch (ExecutionException ignore) {} |
63 |
|
* } |
64 |
< |
* } |
65 |
< |
* finally { |
69 |
< |
* for (Future<Result> f : futures) |
70 |
< |
* f.cancel(true); |
64 |
> |
* } finally { |
65 |
> |
* futures.forEach((future) -> future.cancel(true)); |
66 |
|
* } |
67 |
|
* |
68 |
|
* if (result != null) |