java - AtomicBoolean vs Synchronized block ,有什么区别

标签 java concurrency synchronization boolean atomic

我试图理解以下两个代码块之间的区别

AtomicBoolean ab = new AtomicBoolean(false);  

using the following to get and set state. .
ab.get();
ab.set(X);

vs. 

private boolean ab = false;
private final Object myboollock = new Ojbect();

public void setAB(boolean state)
{
    synchronized(myboollock)
     {
          ab = state;
     }
}

public boolean getAB()
{
 synchronized(myboollock)
 {
         return ab;
 }
}

我需要线程保护一个 boolean 值,仅此而已,并且有 以前用过后面的方法,但想开始用Atomic 对象,(如果)它们是安全的?,

最佳答案

如果所有您尝试做的是获取和设置单个boolean 值原子,那么是的 - 您可以使用AtomicBoolean而不是没有任何同步。

当然,synchronized 允许更广泛的用途,例如在 block 内执行多​​个操作而不会丢失锁,或者将其用于等待/通知。所以它不像 AtomicBoolean 是同步的通用替代方案 - 但在这种情况下,您可以使用它代替同步。

关于java - AtomicBoolean vs Synchronized block ,有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28155245/

相关文章:

java - 如何在 Spring Boot 应用程序中正确使用 ThreadPoolExecutor

python - 插孔音频 - 将应用程序同步到主控

持有监视器的 Java 线程

java - 为 API 和 Angular 内容设置 spring 主机域作为主域

java - 由于空指针错误,Android 蓝牙应用程序无法运行

java - 当我尝试在模拟器上打开时,Android应用程序不断停止

java - 带有 mongodb bson 库的 Mongodb 驱动程序在单独的项目中使用时会导致 completableFuture 挂起

java - 如何使用 ExecutorService 等待所有线程完成?

java - 在 Stripe 中以编程方式创建优惠券代码

maven - 我在 Android Studio 中出现 gradle 同步错误, "Could not find method calsspath() for arguments [com.github.dcendents:android-maven-gradle-plugin:2.0]"