2011-06-07 10 views

Respuesta

22

Si inicia cada uno con el comando java (desde la línea de comandos) se ejecutarán como JVMs totalmente separados.

Los "Programas" se pueden iniciar como Threads separados que se ejecutan dentro de la JVM.

+0

Depende del proveedor, pero es cierto para el estándar JVM de Oracle para Windows/Linux/OS x –

1

Depende de la plataforma y la implementación de JVM, pero normalmente se ejecutarían en máquinas virtuales separadas.

1

Suponiendo que quiso decir 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).

0

¿Se ejecutarán los programas en una sola instancia de JVM o se ejecutarán en dos instancias diferentes de JVM?

Depende de usted. El enfoque más simple es usar JVM separadas.

0

Lo que podría hacer es usar dos hilos separados. Para exampe

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

Si quieres dos programas separados para interactuar que tendría que utilizar sockets

13

java puede empezar a abrir una aplicación a la vez, pero se podría escribir un simple lanzador que toma la clase nombres como argumentos y los ejecuta en hilos separados. Un esquema rápida:

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 

debe ejecutar la aplicación App1 y App2 dentro de la misma máquina virtual y en paralelo.

Cuestiones relacionadas