假设我在同一台机器上同时运行两个java程序。程序是在单个JVM实例中运行还是在两个不同的JVM实例中运行?
答案 0 :(得分:23)
答案 1 :(得分:13)
java
可以一次只打开一个应用程序,但是你可以编写一个简单的启动程序,它将类名作为参数并在不同的线程中执行它们。快速概述:
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
应该在同一个VM内并行执行应用程序App1和App2。
答案 2 :(得分:1)
这取决于平台和JVM实现,但通常它们将在不同的VM中运行。
答案 3 :(得分:1)
假设您通过单词program表示进程,那么启动两个进程,将创建两个不同的JVM。
使用java应用程序启动器启动JVM进程;这应该是你的程序的入口点,这是主要的方法。您可以从此入口点以及其他类中链接到其他类。这将继续在同一JVM进程中发生,除非您启动另一个进程(运行另一个程序)。
答案 4 :(得分:0)
程序是在单个JVM实例中运行还是在两个不同的JVM实例中运行?
这取决于你。最简单的方法是使用单独的JVM。
答案 5 :(得分:0)
你可以做的是使用两个单独的线程。例如
new Thread() {
public void run() {
System.out.println("this is running separately from the main thread!");
}
}.start();
如果你想要两个独立的程序进行交互,你需要使用套接字