在看tomcat源碼時,TaskThreadFactory這個線程工廠類中用到ThreadGroup這個類,以前沒有用到過,因此就特意查了一下 ThreadGroup這個屬於java元老級的類,在java1.0版本中就出現了,裏面還有不少已經不推薦使用線程的方法,例如suspend(),resume()這類方法。java
總的來講,ThreadGroup裏面是一個樹狀的結構,裏面管理一些線程,能夠對線程設置優先級,同時線程組中還能夠有線程組。不過做用不是太大。裏面的一些關鍵方法有如下幾個:web
//獲取活躍的線程組的個數 activeGroupCount() //獲取活躍的線程個數 activeCount()`
在tomcat中的使用方式以下:tomcat
public class TaskThreadFactory implements ThreadFactory { private final ThreadGroup group; private final AtomicInteger threadNumber = new AtomicInteger(1); private final String namePrefix; private final boolean daemon; private final int threadPriority; public TaskThreadFactory(String namePrefix, boolean daemon, int priority) { SecurityManager s = System.getSecurityManager(); group = (s != null) ? s.getThreadGroup() : Thread.currentThread().getThreadGroup(); this.namePrefix = namePrefix; this.daemon = daemon; this.threadPriority = priority; } @Override public Thread newThread(Runnable r) { TaskThread t = new TaskThread(group, r, namePrefix + threadNumber.getAndIncrement()); t.setDaemon(daemon); t.setPriority(threadPriority); // Set the context class loader of newly created threads to be the class // loader that loaded this factory. This avoids retaining references to // web application class loaders and similar. if (Constants.IS_SECURITY_ENABLED) { PrivilegedAction<Void> pa = new PrivilegedSetTccl( t, getClass().getClassLoader()); AccessController.doPrivileged(pa); } else { t.setContextClassLoader(getClass().getClassLoader()); } return t; } }