我尝试使用volatile布尔值来充当停止/启动/重新启动线程中的动作的标志,但它不起作用。它只是一直持续下去,永不终止。任何帮助如何正确地做到这一点或为什么我的代码不起作用将不胜感激。提前致谢。如何使用标志重新启动线程中的操作?
public class thread {
public static int i = 0;
private static Thread print = null;
private static printThread runnable = null;
public static void main(String[] args) {
runnable = new printThread();
print = new Thread (runnable);
print.start();
System.out.println("Starting");
runnable.begin();
if(i > 5)
{
runnable.terminate();
}
i = 10;
runnable.begin();
if(i > 15)
{
runnable.terminate();
}
}
public static final void print()
{
System.out.println(i);
i++;
}
public static final class printThread implements Runnable {
private volatile boolean running = false;
public void terminate() {
running = false;
}
public void begin() {
running = true;
}
public boolean isRunning() {
return running;
}
public void run() {
while(true)
{
if(running)
{
print();
}
else
{
}
}
}
}
}
“这行不通”比较模糊。请修改您的问题以扩展程序的预期行为。你应该真的了解[并发](https://docs.oracle.com/javase/tutorial/essential/concurrency/)。 – Paul
可能是因为terminate()永远不会被调用。例如,主函数在'i'变为5之前执行了它的主体。 – Tsyvarev