gpt4 book ai didi

java - 双重检查锁定作为反模式

转载 作者:行者123 更新时间:2023-12-01 06:24:00 24 4
gpt4 key购买 nike

有一个共同的信念和多个来源(包括 wiki )声称这个习惯用法是一种反模式。

  1. 如果使用了正确的实现(例如,使用 volatile ),那么反对在生产代码中使用它的论据是什么

  2. 在多线程环境中实现延迟初始化的适当替代方案是什么?锁定整个方法可能会成为瓶颈,即使现代同步相对便宜,但它仍然慢得多,尤其是在争用情况下。静态持有者似乎是一种特定于语言的并且有点丑陋的黑客(至少对我来说)。基于原子的实现似乎与传统的 DCL 没有太大区别,但允许多次计算或需要更复杂的代码。例如,Scala 是 still using用于实现惰性值的 DCL,而提议的替代方案似乎要复杂得多。

最佳答案

不要使用双重检查锁定。曾经。这是行不通的。不要尝试寻找 hack 来使其工作,因为它可能无法在更高版本的 JRE 上运行。

据我所知,除了锁定整个对象/同步之外,没有其他保存延迟初始化的方法。

synchronized (lock) {
// lookup

// lazy init
}

对于单例来说,静态持有者(如 @trashgod 提到的)很好,但如果你有多个类加载器,则不会保持单一。

如果您在多类加载器环境中需要惰性单例,请使用 ServiceLoader .

关于java - 双重检查锁定作为反模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25262353/

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