Одновременно запускать Java-программы на одной и той же JVM? - PullRequest
24 голосов
/ 07 июня 2011

Предположим, я одновременно запускаю две Java-программы на одной машине. Будут ли программы работать в одном экземпляре JVM или в двух разных экземплярах JVM?

Ответы [ 6 ]

23 голосов
/ 07 июня 2011

Если вы запускаете каждую из них с помощью команды java (из командной строки), они будут работать как отдельные JVM .

"Программы" могут запускаться как отдельные Threads работает внутри одной JVM.

13 голосов
/ 07 июня 2011

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

должен запускать приложения App1 и App2 внутри одной виртуальной машины и параллельно.

1 голос
/ 07 июня 2011

Предполагая, что вы имели в виду процессы под словом программы, тогда да, запуская два процесса, создаст две разные JVM.

Процесс JVM запускается с помощью средства запуска приложений Java; это должно обеспечить точку входа в вашу программу, которая является основным методом. Вы можете ссылаться на другие классы с этой точки входа, а также с других классов. Это продолжит происходить в том же процессе JVM, если вы не запустите другой процесс (для запуска другой программы).

1 голос
/ 07 июня 2011

Это зависит от платформы и реализации JVM, но обычно они запускаются в отдельных виртуальных машинах.

0 голосов
/ 07 июня 2011

Что вы можете сделать, это использовать два отдельных потока. Для экзамена

new Thread() {
  public void run() {
   System.out.println("this is running separately from the main thread!");
  }
}.start();

Если вы хотите, чтобы две отдельные программы взаимодействовали, вам нужно использовать сокеты

0 голосов
/ 07 июня 2011

Будут ли программы работать в одном экземпляре JVM или в двух разных экземплярах JVM?

Это зависит от вас.Самый простой подход - использовать отдельные JVM.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...