gpt4 book ai didi

java - 如何确保在多 VM 环境中不违反单例契约?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:19:27 24 4
gpt4 key购买 nike

根据单例设计模式,在整个“应用程序”中只能存在一个单例类实例。然而,这个定义假设 Singleton 类本身由一个类加载器加载一次。但是,在理论上的多 VM 环境中,同一个 Singleton 类有可能被多个类加载器加载。

开发人员如何确保在整个多虚拟机环境中只有一个实例可用?有没有一种方法可以确保仅通过单个类加载器进行类加载?

最佳答案

简答?在非托管环境中你不能。这就是单例模式的谬误,在正常环境下确实无法强制执行。想一想:一个类对象存在于类加载器的上下文中,可以有多个类加载器存在于同一个 VM 中。同一个节点内可以有多个虚拟机。多个节点可以是同一应用程序的一部分。当然,如果这些类对象被实现为单例,那么它们中的每一个都将创建该类的单个实例,但是可以(可能)有许多类对象。

正如 Oleg Mikheev 的回答中提到的,最新版本的 Java EE 规范对单例 session bean 有规定;我不熟悉它们的实现细节,但我想知道它们是否真的非常单例:存在于集群应用程序中的单个实例 - 或者它们是否只是一个逻辑抽象,多个实例存在于不同的节点上。

关于java - 如何确保在多 VM 环境中不违反单例契约?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14572626/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com