jdk - Simultáneamente, ejecute programas Java ejecutados en la misma JVM?
java runtime environment (6)
¿Los programas se ejecutarán en una sola instancia de JVM o se ejecutarán en dos instancias diferentes de JVM?
Eso depende de ti. El enfoque más simple es usar JVM separadas.
Supongamos que ejecuto dos programas Java simultáneamente en la misma máquina. ¿Los programas se ejecutarán en una sola instancia de JVM o se ejecutarán en dos instancias diferentes de JVM?
Depende de la plataforma y la implementación de JVM, pero normalmente se ejecutarían en máquinas virtuales separadas.
Lo que podrías hacer es usar dos hilos separados. Por ejemplo
new Thread() {
public void run() {
System.out.println("this is running separately from the main thread!");
}
}.start();
Si quiere que dos programas separados interactúen, necesitaría usar sockets
Suponiendo que se refirió a procesos por la palabra programas, entonces sí, comenzando dos procesos, creará dos JVM diferentes.
Se inicia un proceso de JVM utilizando el iniciador de aplicaciones Java; esto debe proporcionar un punto de entrada a su programa, que es el método principal. Puede vincular a otras clases desde este punto de entrada, y desde otras clases también. Esto continuaría ocurriendo dentro del mismo proceso de JVM, a menos que inicie otro proceso (para ejecutar otro programa).
java
puede abrir una aplicación a la vez, pero puede escribir un iniciador simple que tome los nombres de las clases como argumentos y los ejecute en hilos separados. Un resumen rápido:
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();
}
}
}
Llamarlo como
java -cp <classpath for all applications!> Launcher com.example.App1 com.example.App2
debería ejecutar la aplicación App1 y App2 dentro de la misma máquina virtual y en paralelo.