线程池3rd卷:龙卧浅滩等海潮

笑谈ThreadFactory

全世界让一个人沉默并不比一个人让全世界沉默更具有正当性。——约翰•密尔

眼看你的饭店生意越做越大,又出现了一个头疼的问题——厨师管理问题。福祸相依,你发现有些厨师培训学校的校长开始主动找你喝茶,大家都心知肚明,这是“醉翁之意不在酒”,校长是来推销自己的学生,进而提高学校的就业率。你表面上装出一副为难的样子,心中已有主意。

ThreadFactory就是我们抽象的厨师培训学校,对于厨师的等级,姓名,状态**(Thread的 priority, name ,daemon status…**)等工作全部可以集中在这里处理。

public interface ThreadFactory {
    /**
     * Constructs a new {@code Thread}.  Implementations may also initialize
     * priority, name, daemon status, {@code ThreadGroup}, etc.
     * 创建新线程,可以在这里设置线程的权限,名称,守护状态的...
     */
    Thread newThread(Runnable r);
}

为了让饭店生意不出现什么意外,还需要指定一个默认厨师培训学校(DefaultThreadFactory)

	/**
     * The default thread factory
     * 默认的“厨师培训学校”
     */
    static class DefaultThreadFactory implements ThreadFactory {
        private static final AtomicInteger poolNumber = new AtomicInteger(1);
        private final ThreadGroup group;
        private final AtomicInteger threadNumber = new AtomicInteger(1);
        private final String namePrefix;

        DefaultThreadFactory() {
        	/**
        	* 这里的SecurityManager就不展开讨论,有需要的下方评论,看情况出一篇文章
        	* ThreadGroup 顾名思义,代表一个线程集合,是树状结构。
        	*/
            SecurityManager s = System.getSecurityManager();
            // getThreadGroup() 创建实例化任何一个线程都会被调用。
            group = (s != null) ? s.getThreadGroup() :
                                  Thread.currentThread().getThreadGroup();
            namePrefix = "pool-" +
                          poolNumber.getAndIncrement() +
                         "-thread-";
        }

        public Thread newThread(Runnable r) {
            Thread t = new Thread(group, r,
                                  namePrefix + threadNumber.getAndIncrement(),
                                  0);
            if (t.isDaemon())
                t.setDaemon(false);
            if (t.getPriority() != Thread.NORM_PRIORITY)
                t.setPriority(Thread.NORM_PRIORITY);
            return t;
        }
    }

到了这里,你突然有点怀疑自己当初的选择(做一只程序猿)…

发布了23 篇原创文章 · 获赞 14 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/wangcheeng/article/details/104656224
3rd