AbstractQueuedSynchronizer

AbstractQueuedSynchronizer

我试图从高层次上理解如何使用AbstractQueuedSynchronizer作为构建块来构建Java并发API。我在此类中未看到synchronizedwait() + notify()的任何使用。那么如何实现线程安全代码呢?

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

最佳答案

Unsafe 类的记录不如JDK公开公开的类好,因此,并非所有保证其方法的保证都是显而易见的。

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



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

10-08 13:13