Double-checked locking: Take two.
双重检查锁定:获取两个。
Thus, the name "double-checked locking."
这就是“双重检查锁定”名称的由来。
Does this fix the double-checked locking problem?
这是否修改了双重检查锁定的问题?
The theory behind double-checked locking is perfect.
双重检查锁定背后的理论是完美的。
Unfortunately, double-checked locking causes problems.
不幸的是,重复检查锁会带来问题。
However, this does not mean you should use double-checked locking in these instances.
然而,这并不意味着应该在这些实例中使用双重检查锁定。
However, even under the newly proposed memory model, double-checked locking will not work.
尽管如此,即使是在新提议的内存模型中,双重检查锁定也是无效的。
These facts make a code failure due to double-checked locking very difficult to track down.
这些事实将导致代码失败,原因是双重检查锁定难于跟踪。
Under the new memory model, this "fix" to double-checked locking renders the idiom thread-safe.
在新的内存模型中,对双重检查锁定的这个“修复”使 idiom 线程安全。
This fear led to many problematic techniques, such as the double-checked locking idiom (DCL).
这种恐惧导致了许多有问题的技术出现,比如说double - checked locking (DCL)。
Double-checked locking is another common solution but, unfortunately, it does not work (see Listing 6).
重复检查锁是另一种常用的方法,不幸的是,这种方法并不起作用(见清单6)。
The fact that JIT compilers do just this makes the issues of double-checked locking more than simply an academic exercise.
JIT编译器的这一行为使双重检查锁定的问题只不过是一次学术实践而已。
However, the constructor for this object has not run yet, which is precisely the situation that breaks double-checked locking.
然而,此对象的构造函数尚未运行,这恰是破坏双重检查锁定的情况。
In the remainder of this article, we'll examine the double-checked locking idiom in detail to understand just where it breaks down.
在本文余下的部分里,我们将详细介绍双重检查锁定习语,从而理解它在何处失效。
If this code is interrupted by another thread after executing line C3 but before completing the constructor, double-checked locking fails.
如果此代码在执行c 3行后且在完成该构造函数前被另一个线程中断,则双重检查锁定就会失败。
See Resources for a description of the double-checked locking problem and an an explanation of why the proposed algorithmic fixes don't work.
有关双重检查锁定的问题和对为什么所建议的算法修复不能解决问题的说明请参阅参考资料。
One of the proposed fixes to the double-checked locking problem was to make the field that holds the lazily initialized instance a volatile field.
对双重检查锁定问题提出的一种修复是使包含迟缓初始化的实例的字段为一个volatile字段。
To understand where the double-checked locking idiom originated, you must understand the common singleton creation idiom, which is illustrated in Listing 1.
要理解双重检查锁定习语是从哪里起源的,就必须理解通用单例创建习语,如清单1中的阐释?
The bottom line is that double-checked locking, in whatever form, should not be used because you cannot guarantee that it will work on any JVM implementation.
无论以何种形式,都不应使用双重检查锁定,因为您不能保证它在任何JVM实现上都能顺利运行。
JSR-133 is addressing issues regarding the memory model, however, double-checked locking will not be supported by the new memory model. Therefore, you have two options.
JSR- 133是有关内存模型寻址问题的,尽管如此,新的内存模型也不会支持双重检查锁定。
However, the new semantics of volatile allow one of the commonly proposed alternatives to double-checked locking to work correctly, although the technique is still discouraged.
但是,volatile的新语义允许通常所提出的其中一个双重检查锁定的可选方法正确地工作,尽管我们不鼓励这种技术。
To wit, compiler optimizations can make the assignment of the new singleton object before all its fields are initialized. (See "Double-checked locking is broken" in Resources.)
为了更加智能化,编译器优化会在单例对象所有域完全初始化前就创建该单例对象(参见《重复检查锁的致命点》)。
So if the goal of double-checked locking is supposed to offer improved performance over a more straightforward synchronized approach, this "fixed" version doesn't help very much either.
所以如果双重检查锁定的目标是提供比更直观的同步方式更好的性能,那么这个“修复的”版本也没有多大帮助。
Given that the current double-checked locking code does not work, I've put together another version of the code, shown in Listing 7, to try to prevent the out-of-order write problem you just saw.
考虑到当前的双重检查锁定不起作用,我加入了另一个版本的代码,如清单7所示,从而防止您刚才看到的无序写入问题。
Instead of double-checked locking, use the Initialize-on-demand Holder Class idiom, which provides lazy initialization, is thread-safe, and is faster and less confusing than double-checked locking.
不使用双重检查锁定,而使用Initialize - on - demandHolderClassidiom,它提供了迟缓初始化,是线程安全的,而且比双重检查锁定更快且没那么混乱。
However, this does not mean you should use double -checked locking in these instances.
然而,这并不意味着应该在这些实例中使用双重检查锁定。
However, this does not mean you should use double -checked locking in these instances.
然而,这并不意味着应该在这些实例中使用双重检查锁定。
应用推荐