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.Queue;
22 import java.util.concurrent.ConcurrentLinkedQueue;
23
24 import org.apache.maven.plugin.surefire.log.api.ConsoleLogger;
25
26
27
28
29
30
31
32
33 final class InvokerStrategy extends SchedulingStrategy {
34
35 private final Queue<Thread> activeThreads = new ConcurrentLinkedQueue<>();
36
37 protected InvokerStrategy(ConsoleLogger logger) {
38 super(logger);
39 }
40
41 @Override
42 public void schedule(Runnable task) {
43 if (canSchedule()) {
44 final Thread currentThread = Thread.currentThread();
45 try {
46 activeThreads.add(currentThread);
47 task.run();
48 } finally {
49 activeThreads.remove(currentThread);
50 }
51 }
52 }
53
54 @Override
55 protected boolean stop() {
56 return disable();
57 }
58
59 @Override
60 protected boolean stopNow() {
61 final boolean stopped = disable();
62
63 for (Thread activeThread = activeThreads.poll(); activeThread != null; activeThread = activeThreads.poll()) {
64 activeThread.interrupt();
65 }
66 return stopped;
67 }
68
69 @Override
70 public boolean hasSharedThreadPool() {
71 return false;
72 }
73
74 @Override
75 public boolean finished() throws InterruptedException {
76 return disable();
77 }
78
79 @Override
80 public boolean destroy() {
81 return stop();
82 }
83 }