当前位置 : 主页 > 编程语言 > 其它开发 >

Double-Checked Locking 双重检查锁问题

来源:互联网 收集:自由互联 发布时间:2022-06-03
Code Correctness: Double-Checked LockingAbstractDouble-checked locking 是一种不正确的用法,并不能达到预期目标。Explanation许多才智卓越的人都试图使用 double-checked locking 方法来提高性能,并为此付出
Code Correctness: Double-Checked Locking Abstract Double-checked locking 是一种不正确的用法,并不能达到预期目标。 Explanation 许多才智卓越的人都试图使用 double-checked locking 方法来提高性能,并为此付出了大量的时间, 但是无 一成功。 例 1:乍一看,下列代码似乎既能避免不必要的同步又能保证线程的安全性。
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提供,感谢支持】
网友评论