如何更新Runnable中的变量?

时间:2016-03-23 21:56:12

标签: java multithreading 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;
 }

在我的主要课程中,我打电话给:

Thread thread = new Thread(myRunnable);
thread.run();
myRunnable.setActive(false); //This does not work!!! 
                                 //The boolean remains true inside myRunnable.

我已尝试使用" volatile"修饰符处于活动状态,但仍然无法更新。非常感谢任何想法。

1 个答案:

答案 0 :(得分:3)

Thread thread = new Thread(myRunnable);
thread.run();
myRunnable.setActive(false);

第三行只会在run()方法返回后执行。您正在顺序执行单个线程中的所有内容。第二行应该是

thread.start();

该领域应该是不稳定的。

但是,请注意,将活动字段设置为false将使线程进入忙碌循环,不执行任何操作,但通过循环不断地消耗CPU。您应该使用锁等待,直到您可以恢复。