ThreadGroup 線程組

在看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;
    }
}
相關文章
相關標籤/搜索