的在實施例下面無法模擬使用揮發性字段修飾符
private Integer a = 10;
private Integer c = -10;
private int b = -10;
public void acquire(){
synchronized(a){
print("acquire()");
try{
b = -12;
//Thread.sleep(5000);
a.wait(5000);
print("acquire : "+b);
print("I have awoken");
}catch(Exception e){
e.printStackTrace();
}
}
print("Leaving acquire()");
}
public void modify(int n){
print("Entered in modfy");
synchronized(a){
try{
b = -15;
//a.wait(5000);
Thread.sleep(5000);
print("modfy : "+b);
}catch(Exception e){
e.printStackTrace();
}
}
}
線程A在調用獲取(),線程B是調用修改()。
由一個線程更改的b的值對另一個線程可見。
- 線程A:b = -12;並等待
- 線程B:b = -15;打印b;退出
- 線程A:打印b ie -15的新值。
我如何可以模擬需要的揮發性與上面的例子則在上面的例子中使用volatile。
這是家庭作業的傢伙? – Gray 2012-03-06 04:52:05
此主題中的以前的問題是:http://stackoverflow.com/questions/9571982/waitn-is-acting-different-each-time-i-change-the-position-of-synchronized-keyw/9572023和http: //stackoverflow.com/questions/9577913/where-to-call-wait – Gray 2012-03-06 04:52:48
即使你沒有兩面看過馬路,你也不能保證會被汽車撞到。沒有保證失敗的方法,規則不會以這種方式工作。 (就像沒有看到*保證*就沒有辦法過馬路,你會被汽車撞到。) – 2012-03-06 05:00:47