java并发编程的艺术书上的一个问题求解啊。。。

书上的TwinsLockTest那个代码片段里,取消设置Daemon线程之后,test方法结束后,里面开的worker线程为何不会死循环获取锁,然后打印呢?而是当最下面的for循环结束之后就不再打印了。
public class TwinsLockTest {
    @Test
    public void test() {
        final Lock lock = new TwinsLock();
        class Worker extends Thread {
            public void run() {
                // 这里为什么test方法结束之后,不会一直死循环获取锁?
                while (true) {
                    lock.lock();
                    try {
                        SleepUtils.second(1);
                        System.out.println(Thread.currentThread().getName());
                        SleepUtils.second(1);
                    } finally {
                        lock.unlock();
                    }
                }
            }
        }
        for (int i = 0; i < 10; ++i) {
            Worker w = new Worker();
//            w.setDaemon(true);    这里取消设置Daemon线程
            w.start();
        }
        for (int i = 0; i < 10; ++i) {
            SleepUtils.second(1);
            System.out.println();
        }
    }
}

#笔记##读书笔记##Java#
全部评论
有大佬给解答下么
点赞 回复
分享
发布于 2019-06-16 14:57
我猜是守护线程的问题,setDaemon将work内部类设置成守护线程了
点赞 回复
分享
发布于 2019-06-16 15:10
百信银行
校招火热招聘中
官网直投

相关推荐

点赞 1 评论
分享
牛客网
牛客企业服务