我有一个包含循环的线程
while(isRunning){
}
isRunning
是一个值为true
的布尔变量,当点按某个按钮时它会false
,因此它会离开循环和run()
函数线程。
我想创建另一个按钮,点击它会重新输入run()
功能。
我不确定当我离开run()
函数时,线程是否死亡或者只是停止。
我尝试过使用thread.run()
,但它没有用。
此外,我已经在其他人的问题上找到了关于此问题的答案,但似乎没有任何帮助我。谢谢你的帮助
答案 0 :(得分:1)
当一个线程完成处理它的代码时,没有办法重新启动它。你可以:
创建一个新主题并将Runnable
传递给该主题。
如果您需要经常使用run()
方法,请使用Executor
。您可以使用Executors.newSingleThreadExecutor()
,它将为您提供工作线程。 (可重复使用的线程)。
class Example {
static ExecutorService executor = Executors.newSingleThreadExecutor();
static Runnable run = new Runnable() {
public void run() {
}
};
public static void main(String[] args) {
//anytime you wanna run that code..
executor.execute(run);
}
}
答案 1 :(得分:0)
请阅读java并发教程。 http://docs.oracle.com/javase/tutorial/essential/concurrency/
只是可能,保护区块可能对您的案件有用,但您的案例有点模糊,无法推荐任何具体内容。 http://docs.oracle.com/javase/tutorial/essential/concurrency/guardmeth.html
答案 2 :(得分:0)
如果你的线程运行到最后,它就会停止。 它会留在那里收集它的返回状态,直到线程被清理完毕。
要在同一个线程内重新启动,您需要一个额外的控制流程。 例如:
while (restarted) {
while (isRunning) {
}
// Wait for a restart or end click
}
这就是线程池中所谓的工作线程,这是为了获得最佳性能。
但从逻辑上讲,你可能只想创建一个新的线程对象并启动它。
new Thread(p).start();