![](/img/trans.png)
[英]Modifying a static variable in non-synchronized static method, is there a danger to thread safety?
[英]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.