2011-08-16 75 views
4

不同的線程訪問方法「foo」有自己的局部變量拷貝,還是需要使這個方法同步?併發訪問java中的靜態方法,是否需要同步?

class X { 
    static returnType foo(Object arg) { 
     Object localvar; 
     // perform some calculation based on localvar and arg. 
     // no non-local variable is used i.e: this is a utility method. 
     // return something. 
    } 
} 
+1

對於您可能遇到的任何進一步問題,我可以推薦本書「Java Concurrency in Practice」。 – reto

回答

13

您不需要同步該方法。局部變量是在當前線程的「內存空間」中創建的,並且沒有任何其他線程可以訪問它(來自上面顯示的內容)。

1

由於所使用的變量定義/在它自己的範圍內使用是沒有必要syncronize方法。

0

該方法不應該同步,但您應該使用最終變量arg,即
static return foo(final Object arg)。

+1

我不明白爲什麼你會這麼建議 –

+0

由於arg僅用於計算,所以它的值不應該改變。使用final關鍵字,你只需確保它的值不能改變。在多線程的情況下,只需確保計算精確,特別是如果可以共享arg。 – VirtualTroll

+4

Arg不能共享。它完全是線程局部的。更改arg的值不會影響傳入的對象引用。 –