2010-01-27 25 views

回答

3

A static一個進程中的class變量將在該進程中包含的每個線程之間共享。

您可以通過創建一個帶有public static字段的簡單class來驗證此問題,然後啓動一對Threads並讓它們遞增變量並查看會發生什麼。

如果您想確保互斥,您可以將變量設置爲私有,並且只允許通過使用​​關鍵字定義的方法對其進行訪問。

class Foo { 

    private static int aVariable = 0; 

    public static synchronized void increment() { aVariable++; } 
    public static synchronized int getVariable() { return aVariable; } 

} 
+0

是由規格說明還是隻有某些JVM如何做? – 2010-01-27 15:42:24

+0

線程的本質是共享內存。它在語言中指定。雖然我沒有提及它。 – jjnguy 2010-01-27 15:43:30

2

它的線程之間共享,你可以通過變量本身私有的,只能使用一個同步的訪問訪問它確保相互排斥。

1

靜態字段由所有線程共享。 JVM中只有一個字段副本。

要控制對靜態字段的訪問,可以使用同步關鍵字或使用JDK 5.0提供的concurrency utilities

有一種方法可以創建一個變量,每個線程有一個實例,請參閱ThreadLocal

相關問題