gpt4 book ai didi

java - AtomicBoolean 锁在哪里?

转载 作者:行者123 更新时间:2023-11-30 06:24:06 29 4
gpt4 key购买 nike

AtomicBoolean 使用 native 代码进行同步。它如何转化为 java 锁?

有什么区别:

AtomicBoolean a = new AtomicBoolean();
synchronized (a) {
a.set(true);
}

对比:

a.set(true)

我知道不需要 synchronized(a) 因为 a 本身将确保操作是原子的。但是 synchronized(a) 中的锁是否与 a.set(true) 中的锁相同?

最佳答案

atomic 在某些情况下依赖于 JVM 的原子性,例如在 set/get 中,但在其他情况下依赖于 sun.misc.Unsafe 类。您可以在以下位置查看代码:

http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/concurrent/atomic/AtomicBoolean.java

也值得一看:

http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/sun/misc/Unsafe.java#Unsafe

它在 JDK 中用于很多东西,但遗憾的是它不是公共(public)类。更令人难过的是,它的名字如此明显以至于它可以公开并且使用起来完全“安全”;-)

我应该补充一点,原子类的整个思想是避免锁和同步,这通常会提高性能。您不需要使用锁来保护它们,但可能依赖于使用锁时不标准的操作,例如 compareAndSwap 或 incrementAndGet(对于数字)。

关于java - AtomicBoolean 锁在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17418001/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com