1 package org.apache.maven.surefire.junitcore.pc;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import org.apache.maven.surefire.report.ConsoleStream;
23
24 import java.util.Queue;
25 import java.util.concurrent.ConcurrentLinkedQueue;
26
27
28
29
30
31
32
33
34 final class InvokerStrategy
35 extends SchedulingStrategy
36 {
37
38 private final Queue<Thread> activeThreads = new ConcurrentLinkedQueue<>();
39
40 protected InvokerStrategy( ConsoleStream logger )
41 {
42 super( logger );
43 }
44
45 @Override
46 public void schedule( Runnable task )
47 {
48 if ( canSchedule() )
49 {
50 final Thread currentThread = Thread.currentThread();
51 try
52 {
53 activeThreads.add( currentThread );
54 task.run();
55 }
56 finally
57 {
58 activeThreads.remove( currentThread );
59 }
60 }
61 }
62
63 @Override
64 protected boolean stop()
65 {
66 return disable();
67 }
68
69 @Override
70 protected boolean stopNow()
71 {
72 final boolean stopped = disable();
73
74 for ( Thread activeThread = activeThreads.poll(); activeThread != null; activeThread = activeThreads.poll() )
75 {
76 activeThread.interrupt();
77 }
78 return stopped;
79 }
80
81 @Override
82 public boolean hasSharedThreadPool()
83 {
84 return false;
85 }
86
87 @Override
88 public boolean finished()
89 throws InterruptedException
90 {
91 return disable();
92 }
93
94 @Override
95 public boolean destroy()
96 {
97 return stop();
98 }
99 }