在同一线程上两次调用start方法是否合法?

以下代码导致java.lang.IllegalThreadStateException: Thread already started我在程序中第二次调用start()方法。


updateUI.join();    


if (!updateUI.isAlive()) 

    updateUI.start();

这是第二次updateUI.start()被调用。我已经遍历了多次,并且在命中之前调用了线程并完全运行完成updateUI.start()。


调用updateUI.run()避免了该错误,但导致线程在UI线程(如SO上其他文章中提到的调用线程)中运行,这不是我想要的。


线程只能启动一次吗?如果是,那么如果我想再次运行线程该怎么办?如果我没有在线程中执行比UI线程中完成的操作,则该特定线程在后台进行一些计算,并且用户会有不合理的漫长等待。


qq_笑_17
浏览 612回答 3
3回答

喵喵时光机

根据Java API规范中的Thread.start方法:一次启动一个线程永远是不合法的。特别是,线程一旦完成执行就可能不会重新启动。此外:抛出:IllegalThreadStateException-如果线程已经启动。所以是的,a Thread只能启动一次。如果是,那么如果我想再次运行线程该怎么办?如果一个Thread需求需要运行多次,那么应该创建一个新实例Thread并调用start它。

开满天机

不,我们不能再次启动Thread,这样做将引发runtimeException java.lang.IllegalThreadStateException。>原因是一旦Thread执行run()方法,它将进入死状态。让我们举一个例子-考虑再次启动线程并在其上调用start()方法(内部将调用run()方法)就像让死人醒来并运行一样。因为,在完成他的生命后,人将进入死亡状态。public class MyClass implements Runnable{    @Override    public void run() {           System.out.println("in run() method, method completed.");    }    public static void main(String[] args) {                  MyClass obj=new MyClass();                    Thread thread1=new Thread(obj,"Thread-1");        thread1.start();        thread1.start(); //will throw java.lang.IllegalThreadStateException at runtime    }}/ *在run()方法中输出,方法已完成。线程“主”中的异常java.lang.Thread.start上的java.lang.IllegalThreadStateException(未知源)* /
打开App,查看更多内容
随时随地看视频慕课网APP