簡體   English   中英

同時運行在同一個JVM上運行的java程序?

[英]Simultaneously run java programs run on same 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

應該在同一個VM內並行執行應用程序App1和App2。

它取決於平台和JVM實現,但通常它們將在不同的VM中運行。

假設您通過單詞程序來表示進程,那么啟動兩個進程,將創建兩個不同的JVM。

使用java應用程序啟動器啟動JVM進程; 這應該是你的程序的入口點,這是主要的方法。 您可以從此入口點以及其他類中鏈接到其他類。 除非您啟動另一個進程(運行另一個程序),否則這將繼續在同一JVM進程中發生。

程序是在單個JVM實例中運行還是在兩個不同的JVM實例中運行?

那取決於你。 最簡單的方法是使用單獨的JVM。

你可以做的是使用兩個單獨的線程。 例如

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

如果您想要兩個獨立的程序進行交互,則需要使用套接字

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM