2013-04-03 74 views
0

我用多種方法創建了一個類,這個類可以有任何時間只有單個實例,就像單例行爲和沒有任何實例變量的類一樣。多線程調用單例方法會影響局部變量?

現在我很困惑,如果多個調用單個方法會給出預期的結果,如果方法只有參數會受到多個線程的影響?
Bcoz的方法是在堆棧裏一次分配內存,然後同時調用線程的方法,結果是什麼?

+0

如果沒有實例變量,那麼它的一切都很好。 –

回答

5

每個線程都有自己獨立的私有堆棧。當一個線程進入一個方法時,所有的參數和局部變量都在該線程的本地堆棧中,並且其他線程無法訪問它。因此,如果兩個線程進入相同的方法,但此方法只訪問其參數及其局部變量(且參數不指向兩個線程中的相同對象),則一個線程的執行方式無法實現干擾其他線程的執行。它幾乎就像兩個獨立的java進程。

+0

如果方法也是靜態的,那麼對多個線程的方法調用會顯示相同的行爲或任何意外結果? –

+0

這個方法是否是靜態的並不重要。你可以將一個實例方法看作一個隱含的'this'參數的靜態方法,然後你可以用完全相同的方式推理靜態和實例方法。 –