【发布时间】:2011-09-09 23:53:04
【问题描述】:
假设我在同一台机器上同时运行两个 java 程序。程序是在单个 JVM 实例中运行,还是在两个不同的 JVM 实例中运行?
【问题讨论】:
-
它们可能共享 dll,甚至编译类(取决于实现和配置)。
假设我在同一台机器上同时运行两个 java 程序。程序是在单个 JVM 实例中运行,还是在两个不同的 JVM 实例中运行?
【问题讨论】:
java 一次只能打开启动一个应用程序,但您可以编写一个简单的launcher,它将类名作为参数并在单独的线程中执行它们。简要概述:
public class Launcher {
public static void main(String[] args) throws Exception {
for (int i = 0; i<args.length; i++) {
final Class clazz = Class.forName(args[i]);
new Thread(new Runnable() {
@Override
public void run() {
try{
Method main = clazz.getMethod("main", String[].class);
main.invoke(null, new Object[]{});
} catch(Exception e) {
// improper exception handling - just to keep it simple
}
}
}).start();
}
}
}
这样称呼它
java -cp <classpath for all applications!> Launcher com.example.App1 com.example.App2
应该在同一个虚拟机中并行执行应用程序 App1 和 App2。
【讨论】:
假设您用词程序来表示进程,那么是的,启动两个进程将创建两个不同的 JVM。
使用 java 应用程序启动器启动 JVM 进程;这应该为您的程序提供一个入口点,这是主要方法。您可以从这个入口点链接到其他类,也可以从其他类链接到其他类。这将继续在同一个 JVM 进程中发生,除非您启动另一个进程(以运行另一个程序)。
【讨论】:
这取决于平台和 JVM 实现,但通常它们会在不同的 VM 中运行。
【讨论】:
程序会在单个 JVM 实例中运行,还是会在两个不同的 JVM 实例中运行?
这取决于你。最简单的方法是使用单独的 JVM。
【讨论】:
您可以做的是使用两个单独的线程。例如
new Thread() {
public void run() {
System.out.println("this is running separately from the main thread!");
}
}.start();
如果你想让两个独立的程序交互,你需要使用套接字
【讨论】: