从这个问题:AtomicInteger lazySet vs. set并形成此链接:https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/package-summary.html

我可以收集以下几点


lazySet可能比set快
lazySet使用存储-存储屏障(优先执行之前的写入,但未进行有争议的写入(尚未发生))


我可以从文档中找到一个可以应用的用例:


当您想清空指针以帮助GC时,请使用lazySet。


lazySet是否还有其他实际用例?

最佳答案

Caffeine在其许多数据结构中使用惰性写入或宽松写入。


清空字段时(例如ConcurrentLinkedStack)
在发布之前写入易失性字段时(例如SingleConsumerQueue)
可以安全延迟发布的时间(例如BoundedBuffer)
当比赛是良性的时(例如,缓存过期时间戳记)
在锁内时(例如BoundedLocalCache)


ConcurrentLinkedQueue在发布节点之前使用宽松的写入,并且可能会懒惰地设置节点的下一个字段(在发布之前或指示过时的遍历)。

您可能还喜欢阅读Linux Kernel Memory Barriers论文。

08-05 17:20