Java 如何正确引用原子布尔对象?
我有一个用AtomicBoolean(设置为true)初始化的线程类 后来,在同一个类中,我将布尔值设置为falseJava 如何正确引用原子布尔对象?,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
_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) {
}
}
}