Java 如何正确地从同一个可运行线程创建另一个线程实例?
我有一个名为Java 如何正确地从同一个可运行线程创建另一个线程实例?,java,android,multithreading,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(
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()
时,线程不会运行。为什么会这样?
我已确保:
- 线程已停止,即在再次调用
方法之前完成其blinkshow()
方法run()
- 我没有试图重新启动同一个线程,因为语句
slowThread=newthread(slow)每次调用my Runnable时,code>都会创建Thread类的一个新实例
在runnable第一次结束执行后,如何再次创建它的另一个实例?我上面所做的第二次不起作用了,我也不知道为什么。当一个线程被找到时,他进入了“死”状态,不能再使用了。
要使用run方法,您需要创建一个新的thread对象实例。我刚刚发现我做错了什么,现在觉得自己很傻。我在run方法中有另一个标志
stop
(一个布尔变量)。第一次跑步后我忘了把它打开
除非您是我,否则上述代码将正常运行,不会出现任何问题。我们缺少
threadRunning
的声明。它是一个类实例吗?我怀疑这个变量在执行后没有正确设置为false代码>和threadRunning=true
调用start()
为所有其他变量修改创建一个“之前发生”的关系,到那时,线程可能会在start
returns@Xvolks该标志在同一Flash
类中声明,就在这个Runnable的上方。到目前为止,我的代码相当简单,没有太多事情发生,我已经确认该标志已设置并正常工作代码>没有任何作用,因为您的下一个语句是对同一变量的赋值。Re“我的代码…很简单…”您向我们展示的部分没有明显的错误。问题一定在您未向我们展示的部分中的某个地方。因此每次必须以某种方式为线程重新声明Runnable
变量slow
?代码示例没有显示任何重复使用线程
对象的尝试,并且没有理由不能重用Runnable
对象。