为什么Thread实例的isAlive()方法给出了错误的结果?

时间:2014-11-20 14:22:17

标签: java multithreading join interrupt

我开始知道下面的代码将输出显示为false,但是当我们看到这个Thread实例时,我们创建的线程被设置为守护进程并且仍在运行,那么为什么方法调用thread.isAlive()返回错误,给人一种错误的印象,即#34;线程完成了工作并且已经死了"

public class MyThreads {

    private static class MyDaemonThread extends Thread {

        public MyDaemonThread() {
            setDaemon(true);
        }

        @Override
        public void run() {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
            }
        }
    }

    public static void main(String[] args) throws InterruptedException {
        Thread thread = new MyDaemonThread();
        thread.start();
        thread.join();
        System.out.println(thread.isAlive());
    }
}

任何人都可以对此有所了解吗?

1 个答案:

答案 0 :(得分:4)

thread.join();是一个表达式,告诉主线程等待thread终止。所以,它只在线程完成时进入打印语句。所以它是正确的结果,因为thread已经终止。

如果删除join,您会看到结果为真