(Java同步問題)作爲我的標題,我可以訪問同步塊中的靜態變量嗎?會造成不一致嗎?任何人都可以告訴我訪問靜態變量同步塊的缺點或優點的細節。訪問同步塊中的靜態變量
回答
我可以訪問同步塊中的靜態變量嗎?
是的,你可以。
它會導致不一致嗎?
靜態方法在JVM中的該類的所有實例之間共享。共享資源是非線程安全。因此,靜態變量不是線程安全的。因此,如果多個線程嘗試訪問靜態變量,則可能會導致不一致。
我知道的方式來同步對靜態變量的訪問。
在靜態對象上同步。
public class SomeClass{ private static int sum = 0; private static final Object locker = new Object(); public void increaseSum() { synchronized (locker) { sum++; } } }
同步靜態方法。
public class SomeClass { private static int sum = 0; public static synchronized void increaseSum() { sum++; } }
同步類對象
public class SomeClass { private static int sum= 0; public void increaseSum() { synchronized (SomeClass .class) { sum++; } } }
如果靜態變量是在同一應用程序的不同類中使用的公共變量,該怎麼辦?會有什麼不一致嗎? – 2016-08-18 05:36:48
當然,如果有多個線程同時在不同的類中執行代碼,而這些代碼正在嘗試修改/讀取一個公共變量,則存在不一致的可能性。 – NINCOMPOOP 2016-08-20 19:16:54
我可以使用上述方法之一來使其線程安全嗎? – 2016-08-21 13:30:40
- 1. 訪問靜態變量主
- 2. 試圖訪問另一個靜態變量的靜態變量
- 3. 集羣中的靜態變量訪問
- 4. 訪問靜態字段的Java同步和靜態同步方法
- 5. 在C++中訪問靜態類變量?
- 6. Java - 靜態變量不同步
- 7. 從C++中的靜態方法訪問非靜態類變量
- 8. 在構造函數中訪問共享靜態變量是否需要同步?
- 9. 訪問靜態變量的Const方法
- 10. 訪問靜態變量的值
- 11. 同一類中的Java靜態變量和非靜態變量
- 12. 如何在具有相同名稱的變量的靜態函數中訪問全局靜態變量
- 13. 從類對象訪問靜態變量
- 14. 訪問公共靜態變量
- 15. 訪問靜態成員變量
- 16. 使用類名訪問靜態變量
- 17. 無法訪問靜態變量android
- 18. onDraw無法訪問非靜態變量
- 19. Magento靜態塊JavaScript變量
- 20. 如何在asp.net中同步web farm中的靜態變量
- 21. 等同於靜態同步方法的同步塊?
- 22. 從靜態方法訪問非靜態成員變量
- 23. 從動態DLL訪問靜態鏈接庫中的靜態變量/函數
- 24. 問題的靜態變量
- 25. React Native - 在同一類上訪問靜態變量
- 26. 靜態塊VS中的靜態變量初始化順序
- 27. 訪問PHP中的抽象類中的靜態變量
- 28. 訪問全局變量爲靜態類變量
- 29. 如何同步超類的靜態字段上的訪問?
- 30. 從python中的超類訪問類的靜態變量
*我可以訪問靜態變量在同步塊?* ..嘗試。 *它會導致不一致嗎?*是什麼讓你這麼想? – 2013-04-28 15:05:09
如果你有一個靜態變量,同步應該通過持有這樣的變量的對象的一個靜態方法來實現,或者通過使用一個同步的塊來對包含該變量的對象的類進行同步。 – Mike 2013-04-28 15:14:00