簡體   English   中英

非同步 static 方法和線程安全

[英]Non-synchronized static methods & thread safety

假設我有以下方法,該方法線程安全嗎?

public static void forwardProcessingPerStudy(String str)
{
        someNonStaticMethodProcessingOnObj(str);
}

即:兩個單獨的線程是否可以同時運行上述方法並傳遞不同的 str 實例(比如兩個完全不同的字符串對象)並相互沖突?

為了使該方法對線程使用安全,我是否必須使其成為同步方法?

是的,兩個不同的線程可以同時運行該方法,使用相同的字符串引用或不同的引用。

至於是否需要同步,這完全取決於someNonStaticMethodProcessingOnObj做了什么。 該名稱暗示它正在調用非靜態方法,但鑒於您沒有指定要調用它的實例,這似乎不太可能。

如果方法體(以及任何被調用的方法)沒有對任何共享的 state 做任何事情,您不必擔心。 如果是這樣,您需要更仔細地考慮。

是的。

不。

但是方法someNonStaticMethodProcessingOnObj的答案可能會有所不同。

所示方法是線程安全的,因為它不訪問任何 object 上的任何狀態信息。

話雖如此,我們不知道 someNonStaticMethdoProcessingOnObj() 是否存在,更不用說名稱暗示它不是 static 但它沒有針對任何實例運行。

這是一個類似問題的答案,我在其中添加了一些示例,可能會讓您清楚這一點: 同步 static 方法和非 static 方法之間的區別

問題是向外部方法添加同步可能無濟於事,因為這會在關聯的 Class object 上同步。 內部方法可能需要在其他東西上同步。 所以需要一些照顧。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM