Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何正确地从同一个可运行线程创建另一个线程实例?_Java_Android_Multithreading - Fatal编程技术网

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)都会创建Thread类的一个新实例

在runnable第一次结束执行后,如何再次创建它的另一个实例?我上面所做的第二次不起作用了,我也不知道为什么。

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

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


除非您是我,否则上述代码将正常运行,不会出现任何问题。

我们缺少
threadRunning
的声明。它是一个类实例吗?我怀疑这个变量在执行后没有正确设置为false
threadRunning=true
调用
start()
为所有其他变量修改创建一个“之前发生”的关系,到那时,线程可能会在
start
returns@Xvolks该标志在同一
Flash
类中声明,就在这个Runnable的上方。到目前为止,我的代码相当简单,没有太多事情发生,我已经确认该标志已设置并正常工作没有任何作用,因为您的下一个语句是对同一变量的赋值。Re“我的代码…很简单…”您向我们展示的部分没有明显的错误。问题一定在您未向我们展示的部分中的某个地方。因此每次必须以某种方式为线程重新声明
Runnable
变量
slow
?代码示例没有显示任何重复使用
线程
对象的尝试,并且没有理由不能重用
Runnable
对象。