首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么并发接口的AbstractQueuedSynchronizer构建块没有任何同步的东西?

为什么并发接口的AbstractQueuedSynchronizer构建块没有任何同步的东西?
EN

Stack Overflow用户
提问于 2019-07-06 21:08:06
回答 1查看 107关注 0票数 3

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

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

EN

回答 1

Stack Overflow用户

发布于 2019-07-07 04:58:06

Unsafe类没有像JDK公开的类那样有文档记录,所以并不是它的方法提供的所有保证都是显而易见的。

但是,如果您查看latest source code of AbstractQueuedSynchronizer,就会发现它现在使用的是VarHandle,它的方法有详细的文档记录。对于compareAndSet,请参阅文档says

使用setVolatile的内存语义将变量的值自动设置为newValue (java.lang.Object...)如果变量的当前值(称为见证值)通过内存语义getVolatile(java.lang.Object...)访问,则对expectedValue执行==操作。

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56914381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档