2013-11-03 53 views
0

我在考慮使用靜態方法,其中輸入到靜態方法將是唯一的項目被用來獲得該方法的返回值。我的應用程序將使用多個線程。我的問題是:我是否需要爲方法同步/使用鎖(或者確保所使用的變量是volatile/atomic long等),或者由於該方法是靜態的,我的方法只使用方法中的輸入獲取輸出(並且不訪問任何其他對象)。是在java線程安全的靜態方法

+0

如果全部由'static'調用的方法是線程安全的,那麼它是。否則它不是。 –

+0

這個問題是一個很好的候選人*關閉* :) – Sage

+0

你需要了解什麼線程安全手段。 –

回答

7

由於static和線程安全是正交的概念,一般的答案是它取決於代碼

-1

只存在static變量/對象的一個​​副本。重要的是你的方法運作。

假設您的static方法修改了Vector,則不需要同步。如果它正在修改ArrayList那麼你需要同步。
如果它是自定義類的對象,那麼就需要同步。

你可能想了解更多關於線程安全=)

+0

請重新說明'由於方法是靜態的,它們只能對靜態值進行操作。「# –

+0

@SotiriosDelimanolis在這裏預期什麼詞? =) –

+0

@LittleChild:實際解釋正確的東西的單詞;)使用靜態方法操作非靜態屬性很好,爲什麼不可能呢? 'static void test(MyObject someObject){someObject.someMember = 5; }';) –