gpt4 book ai didi

java - 并发 api 的 AbstractQueuedSynchronizer 构建 block 如何没有任何同步?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:30:41 27 4
gpt4 key购买 nike

我试图从较高的层次理解 java 的并发 API 是如何使用 AbstractQueuedSynchronizer 作为构建 block 构建的。我在这个类中没有看到任何synchronizedwait() + notify() 的使用。那么如何实现线程安全的代码呢?

虽然我看到不安全 CAS 操作实现了一些原子性,但这还不足以拥有完全线程安全的代码。

最佳答案

Unsafe类没有像 JDK 公开公开的类那样详细记录,因此并非所有其方法所做的保证都是显而易见的。

但是,如果您查看 latest source code of AbstractQueuedSynchronizer ,您会看到它现在使用 VarHandle,其方法有详细记录。对于 compareAndSet,文档 says :

Atomically sets the value of a variable to the newValue with the memory semantics of setVolatile(java.lang.Object...) if the variable's current value, referred to as the witness value, == the expectedValue, as accessed with the memory semantics of getVolatile(java.lang.Object...).

这意味着不会出现竞争条件,因为对于两个并发线程,只有一个线程会更新值,另一个线程会失败。您将获得所需的内存可见性保证。

关于java - 并发 api 的 AbstractQueuedSynchronizer 构建 block 如何没有任何同步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56914381/

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