2016-09-06 5 views
-3

Я только что видел проблему в моем нижнем коде в методе isAlive, он вернет false даже метод thread.start(), даже я также попытался добавить некоторый сон в основной поток, так как так же как мой объект потока, но все же он дает такое же поведение.Неправильное поведение IsAlive() в Thread

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' и использует его для создания и запуска потока в вашем основном классе. В 'run()' Runable ', используйте 'sleep' и цикл. В основном, проверьте, что нить жива. – TheLostMind

ответ

4

Ваша нить, которую вы сделали, ничего не делает, поэтому она мгновенно заканчивается и умирает.

Рассмотрим это:

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

и повторите попытку.

+0

oh..sorry забыть назначить работу, THX будет работать –

1

Прочитано java doc isAlive();

  • Испытания, если эта нить живая. Нить живая, если она была запущена и еще не умерла.

Вы только создаете экземпляр в конструкторе без запуска. Таким образом, поток не запускается.

Смежные вопросы