1
我有一個方法如下:競爭條件在靜態方法中
public static void method() {
int i = 0;
i = i + 1;
}
我有一個靜態方法中的int變量。該方法由多個線程訪問。
我的問題是:
- 是否
i
變量這場比賽的條件? - 如果在春季Web應用程序中訪問並同時由多個用戶訪問該方法,該怎麼辦?
我有一個方法如下:競爭條件在靜態方法中
public static void method() {
int i = 0;
i = i + 1;
}
我有一個靜態方法中的int變量。該方法由多個線程訪問。
我的問題是:
i
變量這場比賽的條件?如果該變量是在方法中聲明的,那麼它就存在於提供給方法的單個調用的棧幀中。只有調用該方法的線程才能訪問堆棧幀。在發佈的示例中沒有競爭條件,每個方法的調用都獲得它自己的變量副本。你需要共享狀態纔能有競爭狀態。
這些堆棧幀是執行遞歸方法時堆積起來的東西,並佔用堆棧空間,直到發生某個堆棧溢出錯誤,因爲遞歸導致越來越多的堆棧幀被分配,而沒有任何方法調用有機會完成(這將釋放他們的堆棧空間)。
參考這個http://stackoverflow.com/q/17343157/2809326 – arjun
@ElliottFrisch它不是一個線程本地,它是一個堆棧變量。 (區別在於它是可重入的。) – chrylis