gpt4 book ai didi

java - Semaphore 可以安全地使用双重检查锁定习惯用法吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:03:07 26 4
gpt4 key购买 nike

下面的线程在java中是安全的吗?

public class TestDCL{
private static final Semaphore lock = new Semaphore(1);
private Object instance;

public Object m(){
if(instance == null){
lock.acquire();
if(instance == null){
instance = new Object();
}
lock.release();
}
return instance;
}
}

最佳答案

这不是线程安全的。 new Object(); 语句不是原子操作。当为它分配内存时,instance 不再是 null。在为 instance 分配内存之后但在调用其构造函数之前到达第一个 if 条件的新线程将返回一个部分构造的对象。如果您正在尝试实现线程安全的单例,请使用 Bill Pugh's solution这既是线程安全的又是惰性的。

关于java - Semaphore 可以安全地使用双重检查锁定习惯用法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4075572/

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