为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

qq_笑_17 2019-10-17 13:12:11
以下代码导致java.lang.IllegalThreadStateException: Thread already started我在程序中第二次调用start()方法。updateUI.join();    if (!updateUI.isAlive())     updateUI.start();这是第二次updateUI.start()被调用。我已经遍历了多次,并且在命中之前调用了线程并完全运行完成updateUI.start()。调用updateUI.run()避免了该错误,但导致线程在UI线程(如SO上其他文章中提到的调用线程)中运行,这不是我想要的。线程只能启动一次吗?如果是,那么如果我想再次运行线程该怎么办?如果我没有在线程中执行比UI线程中完成的操作,则该特定线程在后台进行一些计算,并且用户会有不合理的漫长等待。
查看完整描述

3 回答

?
喵喵时光机

TA贡献1846条经验 获得超7个赞

根据Java API规范中的Thread.start方法:


一次启动一个线程永远是不合法的。特别是,线程一旦完成执行就可能不会重新启动。


此外:


抛出:

IllegalThreadStateException-如果线程已经启动。


所以是的,a Thread只能启动一次。


如果是,那么如果我想再次运行线程该怎么办?


如果一个Thread需求需要运行多次,那么应该创建一个新实例Thread并调用start它。


查看完整回答
反对 回复 2019-10-17
?
开满天机

TA贡献1786条经验 获得超12个赞

不,我们不能再次启动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(未知源)* /


查看完整回答
反对 回复 2019-10-17
  • 3 回答
  • 0 关注
  • 611 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信