如果我在Tomcat(或任何其他服务器)的单个实例上部署并运行同一应用程序的2个实例。然后将创建一个(Singleton类的)单个对象:

  • 跨Tomcat的单个实例(但对于同一应用程序的2个实例通用)或
  • 跨应用程序实例(两个应用程序实例不同)

  • 因此,从本质上讲,我想了解是否总是为每个JVM创建Singleton类的单个对象?如果应用程序托管在Web服务器(或容器)上,这如何工作?

    最佳答案

    如果您有一个singleton类,并且在Tomcat中运行使用该类的两个Web应用程序,则这两个Web应用程序将在运行Tomcat的JVM中获得此Singleton的2个不同实例。

    但是,如果您的Web应用程序将使用JRE或Tomcat共享库中的单个实例,例如Runtime.getRuntime Web应用程序将获取相同的Runtime实例。

    这是因为Tomcat对Web应用程序使用了单独的类加载器。当webapp类加载器加载类时,它首先尝试在webapp类路径上找到它,如果找不到该类,则要求父类加载器加载该类。

    10-07 19:35
    查看更多