我试图创建一个继续运行的Runnable,但是我需要从外部对变量进行更改,暂停或恢复Runnable正在进行的工作。
这是我的Runnable实现:
private boolean active = true;
public void run() {
while (true) {
if (active) { //Need to modify this bool from outside
//Do Something
}
}
}
public void setActive(boolean newActive){
this.active = newActive;
}
在我的主要课程中,我打电话给:
Thread thread = new Thread(myRunnable);
thread.run();
myRunnable.setActive(false); //This does not work!!!
//The boolean remains true inside myRunnable.
我已尝试使用" volatile"修饰符处于活动状态,但仍然无法更新。非常感谢任何想法。
答案 0 :(得分:3)
Thread thread = new Thread(myRunnable);
thread.run();
myRunnable.setActive(false);
第三行只会在run()方法返回后执行。您正在顺序执行单个线程中的所有内容。第二行应该是
thread.start();
该领域应该是不稳定的。
但是,请注意,将活动字段设置为false将使线程进入忙碌循环,不执行任何操作,但通过循环不断地消耗CPU。您应该使用锁等待,直到您可以恢复。