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