Thread中的IsAlive()行为错误

时间:2016-09-06 06:10:29

标签: java multithreading

我刚刚在isAlive方法的下面的代码中看到了问题,即使我也尝试在主线程中添加一些睡眠以及我的线程对象,它仍会返回false它给出了同样的行为。

public class ThreadBehaviour implements Runnable {
    private Thread t;

    ThreadBehaviour() {
        t = new Thread();
        t.setName("hello");

    }

    public void start() throws InterruptedException {
        if (!t.isAlive()) {
            t.start();

            //Thread.currentThread().sleep(1000L);
            //t.sleep(3000l);
            System.out.println(t.getName() + " Running....." + t.isAlive());// why is Alive is false here?
        }

    }

    public static void main(String args[]) throws InterruptedException {
        ThreadBehaviour myThread = new ThreadBehaviour();

        myThread.start();

    }

    @Override
    public void run() {
        t.run();

    }

}

2 个答案:

答案 0 :(得分:4)

你制作的主题没有任何作用,所以它会立即完成并死掉。

考虑一下:

t = new Thread(() -> {
    while (true) {
        System.out.println("I'm running...");
    }
});

再试一次。

答案 1 :(得分:1)

阅读java doc 的IsAlive();

  • 测试此线程是否存活。如果一个线程已存在,则它是活动的 开始了,还没有死。

您只在构造函数中实例化而未启动。所以线程没有启动。