Подтвердить что ты не робот

Одновременно запускать java-программы на одном JVM?

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

4b9b3361

Ответ 1

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

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

Ответ 2

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 внутри одной и той же виртуальной машины и параллельно.

Ответ 3

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

Ответ 4

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

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

Ответ 5

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

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

Ответ 6

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

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

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