Bob*_*r02 3 java multithreading synchronization
如果在可以更改其引用的字段上进行同步,则如下所述:
class A {
Object someObject;
void method(){
synchronized (someObject) {
Object newObject = new Object();
//possibly modify the old ref
if(chackCondition()){
someObject = newObject;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我担心这里可能会有一些奇怪的,低级的编译器优化,这可能让两个线程同时访问同步区域.任何评论都会得到很大的评价.
你是绝对正确的.这个时刻newObject被暴露给其他线程作为新值someObject,那些其他线程现在使用完全不同的互斥锁,因此可以同时执行"互斥"代码.
一个常见的解决方案是只提供一个不同的互斥锁并同步:
private final Object someObjectMutex = new Object();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2265 次 |
| 最近记录: |