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

本文以饭店管理和厨师培训学校的比喻,深入浅出地介绍了Java中ThreadFactory接口及其默认实现DefaultThreadFactory的作用。通过ThreadFactory,我们可以统一管理线程的创建过程,设置线程的属性如优先级、名称和守护状态等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

笑谈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;
        }
    }

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值