1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.surefire.junitcore.pc;
20
21 import java.util.concurrent.CancellationException;
22 import java.util.concurrent.ConcurrentLinkedQueue;
23 import java.util.concurrent.ExecutionException;
24 import java.util.concurrent.ExecutorService;
25 import java.util.concurrent.Future;
26
27 import org.apache.maven.plugin.surefire.log.api.ConsoleLogger;
28
29
30
31
32
33
34
35
36 final class SharedThreadPoolStrategy extends AbstractThreadPoolStrategy {
37 SharedThreadPoolStrategy(ConsoleLogger logger, ExecutorService threadPool) {
38 super(logger, threadPool, new ConcurrentLinkedQueue<>());
39 }
40
41 @Override
42 public boolean hasSharedThreadPool() {
43 return true;
44 }
45
46 @Override
47 public boolean finished() throws InterruptedException {
48 boolean wasRunningAll = disable();
49 for (Future<?> futureResult : getFutureResults()) {
50 try {
51 futureResult.get();
52 } catch (InterruptedException e) {
53
54 wasRunningAll = false;
55 } catch (ExecutionException e) {
56
57 if (e.getCause() != null) {
58 logQuietly(e.getCause());
59 }
60 } catch (CancellationException e) {
61
62
63
64 }
65 }
66 return wasRunningAll;
67 }
68
69 @Override
70 protected boolean stop() {
71 return stop(false);
72 }
73
74 @Override
75 protected boolean stopNow() {
76 return stop(true);
77 }
78
79 private boolean stop(boolean interrupt) {
80 final boolean wasRunning = disable();
81 for (Future<?> futureResult : getFutureResults()) {
82 futureResult.cancel(interrupt);
83 }
84 return wasRunning;
85 }
86 }