Có thể tạo một lớp Singleton phổ quát, ở bất kỳ thời điểm nào, chỉ có một cá thể được chia sẻ trên nhiều quy trình Java?Làm thế nào để tạo một lớp Singleton chéo trong Java
Trả lời
Nhiều quy trình Java không chia sẻ cùng một máy ảo.
Vì vậy, bạn sẽ kết thúc với một cá thể JVM lưu trữ singleton, sau đó một cá thể JVM cho mỗi quá trình truy cập vào singleton bằng cách sử dụng Gọi phương thức từ xa như @Little Bobby Tables đề xuất.
Dù sao xem xét When is a Singleton not a Singleton:
Nhiều Singletons trong hai hoặc nhiều máy ảo
Khi bản sao của lớp chạy Singleton trong nhiều máy ảo, một thể hiện được tạo ra cho mỗi máy. Rằng mỗi máy ảo có thể giữ Singleton riêng của nó có vẻ hiển nhiên nhưng trong các hệ thống phân tán như các hệ thống sử dụng EJB, Jini và RMI, nó không đơn giản như vậy. Vì các lớp trung gian có thể ẩn các công nghệ phân tán, để cho biết một đối tượng thực sự được khởi tạo ở đâu có thể khó khăn.
Ví dụ: chỉ vùng chứa EJB quyết định cách thức và thời điểm tạo đối tượng EJB hoặc để tái chế các đối tượng hiện có. EJB có thể tồn tại trong một máy ảo khác với mã gọi nó. Hơn nữa, một EJB đơn có thể được khởi tạo đồng thời trong một số máy ảo. Đối với một bean phiên không trạng thái, nhiều cuộc gọi đến những gì xuất hiện, với mã của bạn, là một thể hiện thực sự có thể là các cuộc gọi đến các cá thể khác nhau trên các máy ảo khác nhau. Ngay cả một thực thể EJB có thể được lưu thông qua một cơ chế bền vững giữa các cuộc gọi, do đó bạn không có ý tưởng gì thể hiện câu trả lời của bạn gọi phương thức. (Khóa chính là một phần của thông số bean thực thể là cần thiết chính xác vì danh tính tham chiếu không được sử dụng trong việc xác định bean.)
Khả năng lây lan danh tính EJB của một cá thể EJB duy nhất trên nhiều máy ảo nhầm lẫn nếu bạn cố gắng viết một Singleton trong bối cảnh của một EJB. Các trường thể hiện của Singleton sẽ không độc đáo trên toàn cầu. Bởi vì một số máy ảo có liên quan đến những gì dường như là cùng một đối tượng, một số đối tượng Singleton có thể được đưa vào sự tồn tại.
Các hệ thống dựa trên các công nghệ được phân phối như EJB, RMI và Jini nên tránh các Singletons giữ trạng thái. Các đơn không nắm giữ trạng thái mà chỉ kiểm soát quyền truy cập vào các tài nguyên cũng không thích hợp với các EJB, vì quản lý tài nguyên là vai trò của thùng chứa EJB. Tuy nhiên, trong các hệ thống phân tán khác, đối tượng Singleton kiểm soát tài nguyên có thể được sử dụng trên sự hiểu biết rằng chúng không phải là duy nhất trong hệ thống phân tán, chỉ trong VM cụ thể.
Có, nhưng không phải không có cơ sở bên ngoài. Cách đơn giản nhất là sử dụng RMI. Các tùy chọn khác bao gồm CORBA hoặc Dịch vụ Web - Chỉ cần google nó lên.
- 1. Làm thế nào để kiểm tra một lớp Singleton?
- 2. Làm cách nào để viết một Java EE/EJB Singleton?
- 3. Tạo một lớp singleton với dispatch_once cho lớp hiearchy
- 4. Làm thế nào để tạo một lớp bean java từ một giao diện trong IntelliJ?
- 5. Làm thế nào để tạo một lớp con trong C#?
- 6. Singleton trong Java App Server .. Làm thế nào xấu của một ý tưởng này?
- 7. Làm thế nào để làm mới singleton trong C#
- 8. làm thế nào để tạo ra một lớp năng động tại thời gian chạy trong Java
- 9. Làm thế nào để tạo một ArrayList 2D trong java?
- 10. Làm cách nào để đánh dấu một lớp là một singleton trong UML?
- 11. Làm thế nào để tạo một bean Spring từ một hàm tạo lớp bên trong tĩnh?
- 12. Làm thế nào để tạo một bản sao lớp String?
- 13. Làm thế nào để tạo một đường chéo trong một ô bảng?
- 14. Làm thế nào để thêm các phương pháp lớp học thuận tiện cho một lớp Singleton trong ruby
- 15. Làm thế nào để: Tự động khởi tạo Singleton trong C#
- 16. Làm thế nào tôi có thể thực hiện một lớp singleton trong perl?
- 17. Java Singleton Pattern
- 18. Tạo một lớp cơ sở Singleton bằng PHP 5.3
- 19. Cách tạo lớp con coffeescript singleton
- 20. Làm thế nào để khởi tạo lớp bên trong với sự phản ánh trong Java?
- 21. Làm thế nào để tham chiếu chéo các đối tượng trong các lớp
- 22. Làm thế nào để tạo một scala.collection.immutable.Seq từ một danh sách Java trong Java?
- 23. Làm thế nào để tạo một singleton JavaScript với một hàm tạo mà không sử dụng trở lại?
- 24. Làm thế nào để khởi tạo các lớp bên trong trong một bước trong Scala?
- 25. Lớp dịch vụ có nên được singleton trong java không?
- 26. Làm thế nào để giải quyết crossencess chéo trong OOP?
- 27. Làm thế nào để sử dụng một biến của một lớp, trong một lớp khác trong Java?
- 28. Làm cách nào để lặp lại một lớp tạo của tôi trong Java?
- 29. Làm thế nào để khởi tạo một biến địa phương trong Java chỉ một lần
- 30. Làm cách nào để tạo một lớp Perl?
Một lần cho mỗi đăng nhập vũ trụ/máy chủ/người dùng? –
Hoặc đa vũ trụ? Tuy nhiên, đây là những lỗ trắng khó nắm bắt những trường hợp mới khi bạn ít mong đợi nó nhất. – mdma
Đây không phải là bản sao của câu hỏi được chỉ định. Câu hỏi khác đề cập đến một ứng dụng nói chung. Câu hỏi này đặc biệt về mẫu Singleton qua các ranh giới quy trình. – howettl