Java:锁定线程时,AtomicBoolean和静态布尔变量之间有什么不同?

Hex*_*xor 5 java multithreading synchronization boolean thread-safety

我写了一个名为T的线程类.

我的目的是确保一次只运行一个线程对象.

因此,当调用线程对象时,它将检查一个名为BUSY的布尔标志.

我的问题是什么是不同的

private static AtomicBoolean BUSY = new AtomicBoolean(false);
Run Code Online (Sandbox Code Playgroud)

private static boolean BUSY = false;
Run Code Online (Sandbox Code Playgroud)

我想如果使用'static',所有对象只会检查一个BUSY布尔变量,这样才能确保只有一个线程对象在运行.

Mar*_*nik 7

您必须至少创建布尔变量volatile和AtomicBoolean变量final才能获得可比较的解决方案.在您这样做之后,您的用例将没有任何区别.

如果你使用AtomicBoolean's' getAndSet或者compareAndSet方法,将一个读取动作和一个写入动作组合成一个原子整体,那么就会产生差异,当这些动作完成时,它们不是原子的volatile.