两个不同应用程序中的静态变量行为

时间:2014-08-14 06:15:37

标签: java core

两台应用程序正在服务器中运行。这意味着服务器中存在两个EAR。 现在这两个应用程序中都有相同的jar。 jar有一个静态变量,两个应用程序都使用它。 第一个application_1将该静态变量初始化为50.然后application_2将该变量初始化为100。 那么application_1的静态变量值是多少?它是50还是因为它是相同的jar文件,所以值应该被覆盖为100。

如果是的话,请告诉我原因?由于应用程序应该加载到服务器的不同内存位置,并且jar类将以不同的方式加载,是吗?

2 个答案:

答案 0 :(得分:4)

您还没有说过您正在使用哪个服务器,但通常应用程序服务器涉及多个类加载器 - 一些是共享的,一些是每个应用程序。例如,Tomcat文档有一个good explanation of its classloaders

如果实际上只有一个 jar文件,并且它位于由共享类加载器加载的位置,那么只有一个变量。

但是,如果两个应用程序各自拥有自己的jar文件副本(例如,如果它确实嵌入在EAR文件中) - 或者它位于一个公共位置但是由每个应用程序的单独类加载器加载 - 那么会有两个变量。

基本上,每个类加载器中的每个类型都有自己独立的静态变量。

当然,如果你有两个完全独立的服务器实例,当你不只是在不同的类加载器中而是在不同的进程中 - 此时它们当然是单独的变量。

答案 1 :(得分:0)

每个实例都有自己的范围,因此如果您想要共享变量,第二个实例可以更改其他实例,您可以使用内存中的数据应用程序和Hazelcast。