Предположим, что одновременно я запускаю две Java-программы на одном компьютере. Будут ли запущены программы в одном экземпляре JVM или они будут работать в двух разных экземплярах JVM?
Одновременно запускать java-программы на одном JVM?
Ответ 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();
Если вы хотите, чтобы две отдельные программы взаимодействовали, вам нужно будет использовать сокеты