1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.logging.log4j.core.util;
19
20 import java.util.concurrent.ThreadFactory;
21 import java.util.concurrent.atomic.AtomicInteger;
22
23
24
25
26
27
28 public class Log4jThreadFactory implements ThreadFactory {
29
30 private static final String PREFIX = "TF-";
31
32
33
34
35
36
37
38
39 public static Log4jThreadFactory createDaemonThreadFactory(final String threadFactoryName) {
40 return new Log4jThreadFactory(threadFactoryName, true, Thread.NORM_PRIORITY);
41 }
42
43
44
45
46
47
48
49
50 public static Log4jThreadFactory createThreadFactory(final String threadFactoryName) {
51 return new Log4jThreadFactory(threadFactoryName, false, Thread.NORM_PRIORITY);
52 }
53
54 private static final AtomicInteger FACTORY_NUMBER = new AtomicInteger(1);
55 private static final AtomicInteger THREAD_NUMBER = new AtomicInteger(1);
56 private final boolean daemon;
57 private final ThreadGroup group;
58 private final int priority;
59 private final String threadNamePrefix;
60
61
62
63
64
65
66
67
68
69
70
71 public Log4jThreadFactory(final String threadFactoryName, final boolean daemon, final int priority) {
72 this.threadNamePrefix = PREFIX + FACTORY_NUMBER.getAndIncrement() + "-" + threadFactoryName + "-";
73 this.daemon = daemon;
74 this.priority = priority;
75 final SecurityManager securityManager = System.getSecurityManager();
76 this.group = securityManager != null ? securityManager.getThreadGroup()
77 : Thread.currentThread().getThreadGroup();
78 }
79
80 @Override
81 public Thread newThread(final Runnable runnable) {
82
83 final Thread thread = new Log4jThread(group, runnable, threadNamePrefix + THREAD_NUMBER.getAndIncrement(), 0);
84 if (thread.isDaemon() != daemon) {
85 thread.setDaemon(daemon);
86 }
87 if (thread.getPriority() != priority) {
88 thread.setPriority(priority);
89 }
90 return thread;
91 }
92
93 }