同时运行在同一个JVM上运行的java程序?

时间:2011-06-07 11:09:20

标签: java jvm

假设我在同一台机器上同时运行两个java程序。程序是在单个JVM实例中运行还是在两个不同的JVM实例中运行?

6 个答案:

答案 0 :(得分:23)

如果使用java命令(从命令行)启动每个命令,它们将以完全独立的JVMs运行。

“程序”可以在一个JVM内运行的单独Threads启动。

答案 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();

如果你想要两个独立的程序进行交互,你需要使用套接字