1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.logging.log4j.core.async;
18
19 import java.util.concurrent.ThreadFactory;
20 import java.util.concurrent.atomic.AtomicInteger;
21
22 import org.apache.logging.log4j.core.util.Log4jThread;
23
24
25
26
27 public class DaemonThreadFactory implements ThreadFactory {
28
29 private static final AtomicInteger THREAD_NUMBER = new AtomicInteger(1);
30 private final ThreadGroup group;
31 private final String threadNamePrefix;
32
33 public DaemonThreadFactory(final String threadNamePrefix) {
34 this.threadNamePrefix = threadNamePrefix;
35 final SecurityManager securityManager = System.getSecurityManager();
36 group = (securityManager != null) ? securityManager.getThreadGroup()
37 : Thread.currentThread().getThreadGroup();
38 }
39
40 @Override
41 public Thread newThread(final Runnable runnable) {
42 final Thread thread = new Log4jThread(group, runnable, threadNamePrefix
43 + THREAD_NUMBER.getAndIncrement(), 0);
44 if (!thread.isDaemon()) {
45 thread.setDaemon(true);
46 }
47 if (thread.getPriority() != Thread.NORM_PRIORITY) {
48 thread.setPriority(Thread.NORM_PRIORITY);
49 }
50 return thread;
51 }
52
53 }