Ответ 1
Если вы запустите каждый с помощью команды java
(из командной строки), они будут запускаться как полностью отдельные JVM.
"Программы" могут запускаться как отдельные темы, запущенные внутри одной JVM.
Предположим, что одновременно я запускаю две Java-программы на одном компьютере. Будут ли запущены программы в одном экземпляре JVM или они будут работать в двух разных экземплярах JVM?
Если вы запустите каждый с помощью команды java
(из командной строки), они будут запускаться как полностью отдельные JVM.
"Программы" могут запускаться как отдельные темы, запущенные внутри одной JVM.
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 внутри одной и той же виртуальной машины и параллельно.
Это зависит от платформы и реализации JVM, но обычно они запускаются в отдельных виртуальных машинах.
Предполагая, что вы подразумеваете процессы с помощью программ слов, тогда да, начиная два процесса, создадут два разных JVM.
Процесс JVM запускается с использованием приложения запуска java; это должно обеспечиваться точкой входа в вашу программу, которая является основным методом. Вы можете ссылаться на другие классы из этой точки входа и из других классов. Это будет продолжаться в рамках одного и того же процесса JVM, если только вы не запускаете другой процесс (для запуска другой программы).
Будут ли запущены программы в одном экземпляре JVM или будут выполняться в двух разных экземплярах JVM?
Это зависит от вас. Самый простой подход - использовать отдельные JVM.
Что вы можете сделать, это использовать два отдельных потока. Для примера
new Thread() {
public void run() {
System.out.println("this is running separately from the main thread!");
}
}.start();
Если вы хотите, чтобы две отдельные программы взаимодействовали, вам нужно будет использовать сокеты