考慮下面的類:瞭解之前發生,關係
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 obj'是無意義的,如果'obj'是'Object',它沒有'value'或'bar()'方法。你應該清理你的例子。 – RealSkeptic
Sry對於那個錯字,我試圖澄清。 –