如何更新 Runnable 中的变量?
How do I update a variable inside a Runnable?
我正在尝试创建一个保持 运行 的 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;
}
在我的主要 class 我调用:
Thread thread = new Thread(myRunnable);
thread.run();
myRunnable.setActive(false); //This does not work!!!
//The boolean remains true inside myRunnable.
我试过 "volatile" 修改器处于活动状态,但它仍然不会更新。非常感谢任何想法。
Thread thread = new Thread(myRunnable);
thread.run();
myRunnable.setActive(false);
第三行只会在 运行() 方法返回后执行。您正在单个线程中按顺序执行所有内容。第二行应该是
thread.start();
并且该字段应该是可变的。
但是请注意,将active字段设置为false会使线程进入忙循环,什么都不做,而是不断循环消耗CPU。您应该使用锁等到可以恢复。
我正在尝试创建一个保持 运行 的 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;
}
在我的主要 class 我调用:
Thread thread = new Thread(myRunnable);
thread.run();
myRunnable.setActive(false); //This does not work!!!
//The boolean remains true inside myRunnable.
我试过 "volatile" 修改器处于活动状态,但它仍然不会更新。非常感谢任何想法。
Thread thread = new Thread(myRunnable);
thread.run();
myRunnable.setActive(false);
第三行只会在 运行() 方法返回后执行。您正在单个线程中按顺序执行所有内容。第二行应该是
thread.start();
并且该字段应该是可变的。
但是请注意,将active字段设置为false会使线程进入忙循环,什么都不做,而是不断循环消耗CPU。您应该使用锁等到可以恢复。