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

dro*_*ski 18 java multithreading android

我有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();
    }
});
Run Code Online (Sandbox Code Playgroud)

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

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

The*_*der 36

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

if (thread.getState() == Thread.State.NEW)
{
     thread.start();
}
Run Code Online (Sandbox Code Playgroud)


Yuv*_*aja 5

创建一个线程不是一个好主意.您必须检查线程是否已经启动.如果Thread尚未启动

if(!thread.isAlive()){
thread.start();
}
Run Code Online (Sandbox Code Playgroud)

更好的想法是创建新的Thread实例.

  • 我认为应该有!在`if(!thread.isAlive())...`但是完成的线程不处于"NEW"状态并且不能同时处于活动状态,因此异常仍然可能发生 (4认同)