如何更新 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。您应该使用锁等到可以恢复。