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

时间:2014-04-11 08:29:15

标签: java android multithreading

我有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:线程已经启动。

3 个答案:

答案 0 :(得分:36)

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

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

答案 1 :(得分:5)

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

if(!thread.isAlive()){
thread.start();
}

更好的想法是创建新线程实例。

答案 2 :(得分:0)

在run()结束时,你的线程死了。如果你想让它保持活动状态,那么在线程中添加一个阻塞队列,并使run()成为一个从队列中读取的大循环。不是为每条消息调用start,而是将其添加到队列中。

当然,您仍需要调用start()一次(当您的程序初始化时)。