Java 如何正确引用原子布尔对象?

Java 如何正确引用原子布尔对象?,java,multithreading,concurrency,boolean,java.util.concurrent,Java,Multithreading,Concurrency,Boolean,Java.util.concurrent,我有一个用AtomicBoolean(设置为true)初始化的线程类 后来,在同一个类中,我将布尔值设置为false _isRunning.set(false); 出于某种原因,似乎引用不起作用,并且从未设置原始AtomicBoolean,因为某些预期的操作不会在父线程中发生 这是无法打印“fail”的父类: 您没有显示您是如何阅读它的,您没有声明字段final有什么原因吗?我也尝试过final,但它不起作用。我正在从另一个线程读取while循环中的变量……因此在(\u isRunning.g

我有一个用AtomicBoolean(设置为true)初始化的线程类

后来,在同一个类中,我将布尔值设置为false

_isRunning.set(false);
出于某种原因,似乎引用不起作用,并且从未设置原始AtomicBoolean,因为某些预期的操作不会在父线程中发生

这是无法打印“fail”的父类:


您没有显示您是如何阅读它的,您没有声明字段
final
有什么原因吗?我也尝试过final,但它不起作用。我正在从另一个线程读取while循环中的变量……因此在(\u isRunning.get())时,很难判断孤立的代码片段到底发生了什么。请发布一个。基本上,如果我在构造函数中将isRunning变量设置为false,它可以正常工作。如果我将其引用为_isRunning=isRunning,并将_isRunning设置为false,则它不起作用。因此,您试图发送垃圾邮件子任务,直到其中一个任务得到调度并停止while循环?发生了什么事?
_isRunning.set(false);
public class ParentThread implements Runnable {
  private ExecutorService _executor = null;
  private final AtomicBoolean _isRunning = null;

   public ParentThread(ExecutorService executor, AtomicBoolean isRunning)(
        _executor = executor;
        _isRunning = isRunning;
   }

   public void run() {
    try {
        while(_isRunning.get()) {
            _executor.submit(new WThread(_isRunning));
        }
        if (!_isRunning.get()) {
            System.out.println("Fail.");
            _executor.shutdownNow();
        }
    } catch (IOException e) {

    }
   }
}