我们可以用Java启动两次线程吗

时间:2020-01-09 10:35:06  来源:igfitidea点击:

我们可以在Java中两次启动线程吗?简短的回答是"否",这篇文章试图解释为什么无法在Java的同一线程上两次调用start()方法。

run()方法后线程终止

正如Java中的线程生命周期(线程状态)一文中所述,一旦线程完成执行其run()方法后,它将进入终止状态(即线程已死)。由于线程对象已经死亡,因此不允许在线程上调用start()方法,并引发异常。

根据Java文档–一次启动一个线程永远是不合法的。特别是,线程一旦完成执行就可能不会重新启动。
如果线程已经启动,抛出:IllegalThreadStateException异常。

因此,一个线程只能启动一次,尝试在Java中再次启动同一线程将抛出IllegalThreadStateException。

Java示例代码

public class ThreadTwiceDemo implements Runnable{
  public static void main(String[] args) {
    Thread t = new Thread(new ThreadTwiceDemo());
    t.start();
    // Calling start method again on same thread object
    t.start();
  }

  @Override
  public void run() {
    System.out.println("In run method");    
  }
}

输出:

In run method
Exception in thread "main" 
java.lang.IllegalThreadStateException
	at java.lang.Thread.start(Unknown Source)
	at com.theitroad.ThreadTwiceDemo.main(ThreadTwiceDemo.java:9)

正如我们在输出中看到的,当我们尝试启动一个线程两次时,抛出IllegalThreadStateException。