2016-09-06 73 views
-3

我刚刚在我的下面的代码中的isAlive方法中看到问题,它将返回false,甚至thread.start()方法已被调用,即使我也试图在主线程中添加一些睡眠以及我的线程对象,但它仍然具有相同的行为。线程中错误的IsAlive()行为

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

老实说,我不太清楚你在这里试图做什么 – TheLostMind

+0

我只是想清除有关isAlive方法的概念,我的问题是在我的开始方法,即使我写t.start然后为什么isAlive返回false? –

+0

要测试'isAlive',创建一个独立的类来实现'Runnable',并使用它创建并启动主类中的线程。在你的Runable的'run()'中,使用'sleep'和一个循环。在你的主体中,检查我的线程是否存活 – TheLostMind

回答

4

你的线程没有做任何事情,所以它立即完成并死亡。

考虑一下:

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

,然后再试一次。

+0

哦..请忘记分配工作,thx它会工作 –

1

阅读java文档 isAlive();

  • 测试此线程是否存在。如果线程 已启动并且尚未终止,则线程仍处于活动状态。

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