gpt4 book ai didi

Java - 非最终领域的同步

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:10:29 24 4
gpt4 key购买 nike

在同步可以更改其引用的字段的情况下,如下所述:

class A {

Object someObject;

void method(){
synchronized (someObject) {
Object newObject = new Object();
//possibly modify the old ref
if(chackCondition()){
someObject = newObject;
}
}
}
}

我担心这里可能缺少一些奇怪的低级编译器优化,可能会让两个线程同时访问同步区域。如有任何意见,我们将不胜感激。

最佳答案

你完全正确。当 newObject 作为 someObject 的新值暴露给其他线程时,那些其他线程现在使用完全不同的互斥锁,因此可以执行“互斥”并发编码。

一个常见的解决方案是提供一个不同的互斥量并在其上同步:

private final Object someObjectMutex = new Object();

关于Java - 非最终领域的同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22966382/

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