当前位置: 首页 > 面试题库 >

当我第二次运行线程时:java.lang.IllegalThreadStateException:线程已启动

冉伯寅
2023-03-14
问题内容

我有Thrad和Handler:

Handler handler = new Handler() {
    @Override
    public void handleMessage(android.os.Message msg) {
        super.handleMessage(msg);
        //do somethink
    }
};

Thread thread = new Thread(new Runnable() {
    @Override
    public void run() {
        //do somethink
        msg.obj = 1;
        handler.sendMessage(msg);
        thread.interrupt();
    }
});

当应用启动时,第一次使用 thread.start(); 一切正常。但是当我尝试启动 thread.start(); 从按钮第二次我有:

E / MessageQueue-JNI:java.lang.IllegalThreadStateException:线程已启动。


问题答案:

您应该在启动之前检查该线程的状态。

if (thread.getState() == Thread.State.NEW)
{
     thread.start();
}


 类似资料:
  • 我尝试在每次创建活动时运行以下线程。它第一次工作,但如果我按下后退按钮并尝试再次导航到活动,它总是崩溃第二次。我怎样才能确保这个线程每次都运行成功呢?

  • 我试着运行一个程序,使用线程显示带有数字的乘法、除法、加法和减法表。 但是我希望数字被乘以或相加等。由用户选择。 也就是说,程序应该在用户为每个操作选择一个数字后运行,然后显示结果。

  • 我正在开发一个java应用程序,其中我使用java swing窗体和javafx FXML stage,我对javafx是新手,现在我在应用程序中调用具有控制器的javafx FXML stage,从swing窗体调用FXML stage,单击如下按钮----application.launch(myfxml.class); 下面的代码片段用于调用swing表单-- 我得到的异常是“应用程序启动必

  • 在我的应用程序中,在程序的整个生命周期中,有n个操作必须依次发生。我决定为每个操作创建一个线程,让它们执行一次run方法,然后等待所有其他线程都执行相同的操作,等待轮到它,然后再次执行,依此类推,而不是创建实现这些操作的方法并在while(true)循环中按顺序调用它们。。。 为了实现这个机制,我创建了一个名为StatusHolder的类,它有一个名为threadTurn的字段(表示应该执行哪个线

  • 一个常见的问题:我们可以启动同一个线程两次吗? 答案是:不可以! 启动线程后,将永远无法再次启动它。如果您这样做,则抛出IllegalThreadStateException异常。 让我们通过以下示例看看: 输出结果为:  

  • 我有一个系统,当它收到来自webservice的调用时启动workers。Worker由ExecutorService启动,要启动的类实现Runnable。但是,如果工作线程超时,我将无法实际杀死该工作线程,这将导致我的系统出现资源问题。 如果工作线程超时,我将看到以下日志消息: 然后是保持空闲的服务,直到另一个工作者请求进入。然而,尽管对ExecutorService和Future分别调用了sh