开发者

Simultaneously run java programs run on same JVM?

Suppose I run two java programs simultaneously on the same machine. Will the programs run in a single instance of JVM or will they run in two different instan开发者_如何转开发ces of JVM?


If you start each one with the java command (from the command line) they will run as totally separate JVMs.

"Programs" may be started as separate Threads running inside the one JVM.


java can just open start one application at a time, but you could write a simple launcher that takes class names as arguments and executes them in separate threads. A quick outline:

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();
    }
  }
}

Calling it like

  java -cp <classpath for all applications!> Launcher com.example.App1 com.example.App2

should execute the application App1 and App2 inside the same VM and in parallel.


Assuming that you meant processes by the word programs, then yes, starting two processes, will create two different JVMs.

A JVM process is started using the java application launcher; this ought to provided with an entry-point to your program, which is the main method. You may link to other classes from this entry-point, and from other classes as well. This would continue to occur within the same JVM process, unless you launch another process (to run another program).


It depends on the platform and the JVM implementation, but typically they would run in separate VMs.


Will the programs run in a single instance of JVM or will they run in two different instances of JVM?

That is up to you. The simplest approach is to use separate JVMs.


What you could do is use two separate threads. For exampe

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

If you want two separate programs to interact you would need to use sockets

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜