使用同樣的方法是否有可能有這樣的行爲:線程並行
一個線程(T1)調用一些方法,例如,compute(10);
雖然該功能仍在執行,另一個線程再次調用它(其它參數),比如說,compute(20);
如果方法
public int compute(int i) {
return i+20;
}
將每個線程得到正確的資源ULT?
我預計T1得到20
,而T2得到40
。
使用同樣的方法是否有可能有這樣的行爲:線程並行
一個線程(T1)調用一些方法,例如,compute(10);
雖然該功能仍在執行,另一個線程再次調用它(其它參數),比如說,compute(20);
如果方法
public int compute(int i) {
return i+20;
}
將每個線程得到正確的資源ULT?
我預計T1得到20
,而T2得到40
。
由於您僅使用局部變量只有(方法參數是本地的),是的它是安全的。
public class Computer {
public int compute(int i) {
return i+20;
}
}
如果你會使用實例變量或靜態變量,那麼你應該有每read
和write
的變量。
public class Computer {
private int increment;
public synchronized int compute(int i) {
return i+increment; // <-- reads increment
}
private synchronized void setIncrement(int increment) {
this.increment = increment; // <-- writes increment
}
}
接受這個答案是正確的,因爲它是更完整的。 – Pedro 2013-02-10 23:32:36
簡短的回答,是的。每個線程都獲取自己的方法中使用的數據堆棧,這與其他線程完全分離。當數據(例如類級別變量)是線程之間的共享時,您只需要擔心衝突。
假設你compute
方法實現:
int compute(int i) {
return i + 20;
}
那麼每個線程會得到正確的結果,因爲這方法不使用共享的狀態。
那麼,T1會得到30,是的。我建議你寫一些代碼並嘗試一下。 – 2013-02-10 22:54:00