在 java 中具有易失性的单例
2022-09-03 09:03:43
class MyClass
{
private static volatile Resource resource;
public static Resource getInstance()
{
if(resource == null)
resource = new Resource();
return resource;
}
}
在这里,我怀疑根据java并发性在实践中,如果你使用易失性,安全的发布发生(即一旦引用对另一个线程可见,数据也是可用的)。那么我可以在这里使用它吗?但是如果它是正确的,那么假设 thread1 现在检查“resource”并且它是 null,所以它开始创建对象。当 thread1 创建 objet 时,另一个线程即 thread2 出现并开始检查“resource”的值,thread2 发现它为 null(假设创建 “resource” 对象需要相当长的时间,并且由于 thread1 尚未完成创建,因此安全发布尚未发生,因此 thread2 不可用)那么它也会开始创建对象吗?如果是,则类不变中断。我说的对吗?请帮助我理解这里挥发性的这种特殊用途。