gpt4 book ai didi

java - JVM 是否生成在不同应用程序中实现的两个单独的类实例?

转载 作者:行者123 更新时间:2023-11-29 05:58:11 25 4
gpt4 key购买 nike

想象一下两个简单的 Java 应用程序。他们都在实现相同的 JAR 文件,其中包含一个枚举文件,如下所示:

enum enum1{
value1;
}

在这两个应用程序中,我都打印了 enum1.value1 的哈希码。

System.out.print(enum1.value1.hashCode());

即使两个应用程序实现的 JAR 文件相同,哈希码也不相等,JVM 如何工作?

为什么哈希码不相等,因为两个应用程序实现的是同一个 JAR 文件?

编辑
我有两个访问数据库的应用程序。它们在同一个 JVM 中运行。我想实现一种锁定机制,以便在应用程序 1 写入数据库时​​,应用程序 2 必须等待轮到它(即应用程序 1 释放锁时)。我的解决方案是,如果可能的话,创建一个声明了一些 ReentrantLocks 的接口(interface)或一个应该充当锁并由两个应用程序使用的枚举。但是接口(interface)/枚举的实例在两个应用程序中应该是相等的,因为你只能同步同一个对象。

编辑 2
这是架构:

App1.jar              Commons.jar         App2.jar
App1Main.class Commons.class App2Main.class

App1 和 App2 都包含 Commons.jar。 commons.class 只是一个简单的单例类。在 App1 和 App2 中,我都打印了公共(public)实例哈希码:

System.out.println(Commons.getInstance().hashCode());

两个 java 应用程序都像“java -jar app1”和“java -jar app2”一样运行,因此它们在运行时有两个进程。

但是它们打印出不同的哈希码,这就是我所相信的(如果我错了请纠正我),因为它们已被不同的类加载器加载。但是当我在两个应用程序中打印类加载器时,神秘主义就来了:

System.out.print(ClassLoader.getSystemClassLoader().hashCode());

然后哈希码在两个应用程序中是相等的。

最佳答案

不清楚您是否在谈论同一进程中的两个应用程序。即使您是,如果这两个应用程序有单独的 ClassLoader 实例加载同一个 jar 文件,那么就 JVM 而言,这两个枚举类型是不同的类型。如果您希望在两个应用程序使用的进程中使用单一类型,则必须由单个类加载器加载它。

关于java - JVM 是否生成在不同应用程序中实现的两个单独的类实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11202808/

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