在看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; } }