如何从同一个Runnable正确创建另一个线程实例?

时间:2017-08-29 16:58:18

标签: java android multithreading

我有一个名为Flash的课程,其中定义了Runnable

class Flash
{
Runnable slow = new Runnable(){
    public void run(){ 
             //Do stuff here
        }
    }
};
Thread slowThread = null; //Just declared a Thread variable

//more stuff here

}

现在我有一个名为blinkslow()的方法,它使用slow runnable创建一个新的线程类对象:

void blinkSlow()
{
    if(!threadRunning) //Boolean to make sure the thread is not running(works fine)
    {
        slowThread=null;
        slowThread = new Thread(slow);
        slowThread.start();
        threadRunning = true;
    }

}

现在,当run()方法完成其作业时,在其最后一个语句中,它将此布尔标志threadRunning设置为false,然后退出。

然后当我第二次调用方法blinkslow()时,线程不会运行。为什么会这样? 我已经确定了:

  • 线程已停止,即在再次调用run()方法之前完成其blinkshow()方法。
  • 我没有尝试再次重新启动同一个线程,因为语句slowThread = new Thread(slow);每次调用时都会使用Runnable创建一个Thread类的新实例。

如何在第一次结束执行后再次创建runnable的另一个实例?我上面做的第二次没有工作,我不知道为什么。

2 个答案:

答案 0 :(得分:0)

我只知道自己做错了什么,现在我觉得很傻。我在run方法中有另一个标志stop(一个布尔变量)。第一次跑步后我忘了取消它。

上述代码运行正常,没有任何问题,除非你是我。

答案 1 :(得分:-2)

当一个线程被finhed时,他进入“死”状态,并且它不能再被使用了。 要使用run方法,需要创建新的线程对象实例。