Code Correctness: Double-Checked LockingAbstractDouble-checked locking 是一种不正确的用法,并不能达到预期目标。Explanation许多才智卓越的人都试图使用 double-checked locking 方法来提高性能,并为此付出
if (fitz == null) { synchronized (this) { if (fitz == null) { fitz = new Fitzer(); } } } return fitz;
程序员希望保证仅分配一个 Fitzer() 对象,但又不希望每次调用该代码时都进行一次同步。 这就是所谓的 double-checked locking 方法。 令人遗憾的是,它并不起作用,并且可以分配多个 Fitzer() 对象。 有关更 多详细信息,请参见 The "Double-Checked Locking is Broken" Declaration [1]。 Recommendation 其实同步所花费的代价比想象中的要少。 许多情况下,最好的方法就是采用最简单的解决方法。 例 2: 例 1 中的代码应该用以下方式重写:
synchronized (this) { if (fitz == null) { fitz = new Fitzer(); } return fitz; }
Copyright © 2021 Shinoburedo 【本文转自:防御ddos http://www.558idc.com/stgf.html提供,感谢支持】