【发布时间】:2017-06-24 12:48:38
【问题描述】:
考虑以下类:
public myClass {
int a;
Object obj; //This object is not of class myClass nor of a subclass of it.
void foo(int b){
synchronized(this){
print(a);
a = b;
obj.value = b;
obj.bar();
}
}
void bar(){
synchronized(this){
//Some code using obj here.
}
}
}
Java 文档指出:
当线程释放内在锁时,会在该操作与任何后续获取同一锁的操作之间建立起之前的关系。
假设有两个线程 T1、T2 和一个名为 myclass 的 myClass 对象。
现在 T1 调用 foo,不久之后 T2 调用 bar 并最终获得锁并进入 bar()。如果错了,请纠正我,但据我了解,T2 请参阅 T1.foo(b) 中对变量 a 所做的更改。对 obj 所做的更改如何?将其视为任意其他对象。
是否保证发生之前的关系?
【问题讨论】:
-
您的源代码并不是真正的 Java。
int Object obj没有意义,如果obj是Object,则它没有value或bar()方法。你应该清理你的例子。 -
对不起那个错字,我试图澄清。
标签: java multithreading concurrency