2013-02-10 64 views
0

使用同樣的方法是否有可能有這樣的行爲:線程並行

一個線程(T1)調用一些方法,例如,compute(10);

雖然該功能仍在執行,另一個線程再次調用它(其它參數),比如說,compute(20);

如果方法

public int compute(int i) { 
    return i+20; 
} 

將每個線程得到正確的資源ULT?

我預計T1得到20,而T2得到40

+1

那麼,T1會得到30,是的。我建議你寫一些代碼並嘗試一下。 – 2013-02-10 22:54:00

回答

1

由於您僅使用局部變量只有(方法參數是本地的),是的它是安全的。

public class Computer { 
    public int compute(int i) { 
     return i+20; 
    } 
} 

如果你會使用實例變量靜態變量,那麼你應該有​​每readwrite的變量。

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 
    } 
} 
+0

接受這個答案是正確的,因爲它是更完整的。 – Pedro 2013-02-10 23:32:36

1

簡短的回答,是的。每個線程都獲取自己的方法中使用的數據堆棧,這與其他線程完全分離。當數據(例如類級別變量)是線程之間的共享時,您只需要擔心衝突。

0

假設你compute方法實現:

int compute(int i) { 
    return i + 20; 
} 

那麼每個線程會得到正確的結果,因爲這方法不使用共享的狀態。