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
51
52
53
54 public static Log4jThreadFactory createThreadFactory(final String threadFactoryName) {
55 return new Log4jThreadFactory(threadFactoryName, false, Thread.NORM_PRIORITY);
56 }
57
58 private static final AtomicInteger FACTORY_NUMBER = new AtomicInteger(1);
59 private static final AtomicInteger THREAD_NUMBER = new AtomicInteger(1);
60 private final boolean daemon;
61 private final ThreadGroup group;
62 private final int priority;
63 private final String threadNamePrefix;
64
65
66
67
68
69
70
71
72
73
74
75 public Log4jThreadFactory(final String threadFactoryName, final boolean daemon, final int priority) {
76 this.threadNamePrefix = PREFIX + FACTORY_NUMBER.getAndIncrement() + "-" + threadFactoryName + "-";
77 this.daemon = daemon;
78 this.priority = priority;
79 final SecurityManager securityManager = System.getSecurityManager();
80 this.group = securityManager != null ? securityManager.getThreadGroup()
81 : Thread.currentThread().getThreadGroup();
82 }
83
84 @Override
85 public Thread newThread(final Runnable runnable) {
86
87 final Thread thread = new Log4jThread(group, runnable, threadNamePrefix + THREAD_NUMBER.getAndIncrement(), 0);
88 if (thread.isDaemon() != daemon) {
89 thread.setDaemon(daemon);
90 }
91 if (thread.getPriority() != priority) {
92 thread.setPriority(priority);
93 }
94 return thread;
95 }
96
97 }