Java如何確保內部每個JVM只有一個ENUM實例存在?它是在應用程序啓動時創建的,從那時起,當多個線程訪問它時,它只會返回在啓動時創建的對象?
或者它是否實現了類似於單例模式的雙重同步,即使多線程訪問它,也只會創建一個istance?java如何確保每個JVM只有一個枚舉實例
8
A
回答
6
你可以在this answer中看到枚舉實例是靜態類字段,因此在第一次訪問類時被初始化爲類加載的一部分。
classloading is synchronized internally以便確保枚舉實例是單獨(同一類加載器中的單身,那就是,如果你有多個加載器加載相同的枚舉你會得到多個實例)
2
枚舉實例是在類加載時創建。如果同一個枚舉被多個類加載器加載(例如,當一個Web應用程序容器正在加載類加載遊戲時),則內存中將存在多個不兼容的實例。
+0
「不兼容實例」是什麼意思? – apersiankite
相關問題
- 1. 如何確保枚舉的狀態特定於一個實例
- 2. JVM如何確保線程安全使用枚舉實現單例?
- 3. 如何確保Silverlight OOB應用程序只有一個實例?
- 4. 如何確保只有一個View Model Base類的實例?
- 5. C#實例枚舉從另一個
- 6. Java枚舉類型實例
- 7. Java枚舉實例化
- 8. Java的枚舉:一個內有多個字符串枚舉
- 9. 如何確保只有一個類可以創建一個A.B實例?
- 10. 每個BufferedWriter實例只有一個FileWriter實例?
- 11. 如何得到一個枚舉的整數值,當我只有枚舉
- 12. 實現一個枚舉ForwardIndexType
- 13. Java如何獲得總結每個枚舉的所有值
- 14. java - 一個枚舉問題
- 15. 如何將一個枚舉轉換爲另一個枚舉在Java中?
- 16. 如何定義一個枚舉有多個值,這是另一個枚舉
- 17. 如何確保一個類只能被Spring實例化?
- 18. 如何檢查一個實例是否爲枚舉類型
- 19. 確保只有一個類的實例運行
- 20. 確保只有一個應用程序實例
- 21. 創建一個實例並從一個枚舉中調用方法,JAVA
- 22. 如何確保Java序列化中枚舉的一致性?
- 23. 創建一個沒有0值的C#枚舉的實例
- 24. Java:如何定義一個實現接口的枚舉集合
- 25. 如何使一個枚舉項目具有另一個枚舉的項目?
- 26. 如何確保Objective-C中任何時候只有一個類的實例?
- 27. 是枚舉實例「封閉」在枚舉類型的Java?
- 28. Google App Engine - 每個JVM實例是否只使用一個線程?
- 29. Java延遲加載枚舉實例
- 30. 構建在一個枚舉的實例,而無需修改枚舉類
它確保每個類加載器有一個實例。如果您有多個類加載器,則每個加載器都可以擁有自己的實例。它們是按需創建的。 (延遲加載)JVM擁有自己的互斥鎖。 –