1 package org.apache.maven.surefire.api.util.internal;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.util.concurrent.Executors;
23 import java.util.concurrent.ThreadFactory;
24 import java.util.concurrent.atomic.AtomicInteger;
25
26
27
28
29 public final class DaemonThreadFactory
30 implements ThreadFactory
31 {
32 private static final ThreadFactory DEFAULT_THREAD_FACTORY = Executors.defaultThreadFactory();
33
34 private static final AtomicInteger POOL_NUMBER = new AtomicInteger( 1 );
35
36 private final AtomicInteger threadNumber = new AtomicInteger( 1 );
37
38 private final String namePrefix;
39
40 private DaemonThreadFactory()
41 {
42 namePrefix = "pool-" + POOL_NUMBER.getAndIncrement() + "-thread-";
43 }
44
45 @Override
46 public Thread newThread( Runnable r )
47 {
48 Thread t = DEFAULT_THREAD_FACTORY.newThread( r );
49 t.setName( namePrefix + threadNumber.getAndIncrement() );
50 t.setDaemon( true );
51 return t;
52 }
53
54
55
56
57
58 public static ThreadFactory newDaemonThreadFactory()
59 {
60 return new DaemonThreadFactory();
61 }
62
63 public static ThreadFactory newDaemonThreadFactory( String name )
64 {
65 return new NamedThreadFactory( name );
66 }
67
68 public static Thread newDaemonThread( Runnable r )
69 {
70 return new DaemonThreadFactory().newThread( r );
71 }
72
73 public static Thread newDaemonThread( Runnable r, String name )
74 {
75 Thread t = new DaemonThreadFactory().newThread( r );
76 t.setName( name );
77 return t;
78 }
79
80 private static class NamedThreadFactory
81 implements ThreadFactory
82 {
83 private final String name;
84
85 private NamedThreadFactory( String name )
86 {
87 this.name = name;
88 }
89
90 @Override
91 public Thread newThread( Runnable r )
92 {
93 return newDaemonThread( r, name );
94 }
95 }
96 }