如果我在Tomcat(或任何其他服务器)的单个实例上部署并运行同一应用程序的2个实例。然后将创建一个(Singleton类的)单个对象:
因此,从本质上讲,我想了解是否总是为每个JVM创建Singleton类的单个对象?如果应用程序托管在Web服务器(或容器)上,这是如何工作的。
如果您有一个singleton类,并且在Tomcat中运行使用该类的两个Web应用程序,则这两个Web应用程序将在运行Tomcat的JVM中获得此Singleton的2个不同实例。
但是,如果您的Web应用程序将使用JRE或Tomcat共享库中的单个实例,例如Runtime.getRuntime Webapps将获得相同的Runtime实例。
这是因为Tomcat对Web应用程序使用了单独的类加载器。当webapp类加载器加载类时,它首先尝试在webapp类路径上找到它,如果找不到该类,则要求父类加载器加载该类。