java 多進程

多進程的概念java

  • 一個JVM進程對應一個JAVA程序
  • Java編寫程序都運行在在Java虛擬機(JVM)中,
    • 在JVM的內部,程序的多任務是經過線程來實現的
    • 每用java命令啓動一個java應用程序,就會啓動一個JVM進程。
    • 在同一個JVM進程中,有且只有一個進程,就是它本身。
    • 在這個JVM環境中,全部程序代碼的運行都是以線程來運行。

多進程的建立windows

法一:socket

  • Runtime rt = Runtime.getRuntime();  
  • Process process = rt.exec("java com.test.process.MyClass");  

法二:ui

  • ProcessBuilder pb = new ProcessBuilder(myXXcommand,myXXobject);  
  • Process p = pb.start();

建立ProcessBuilder對象是所使用的字符串command的含義:操作系統

  • command指令其實就是指在當前操做系統中如何啓動一個應用的指令;
    • 好比下面的指令:
      • String myQQcommand = "E:\\Program Files (x86)\\Tencent\\QQ\\Bin\\QQ.exe"; //啓動windows下面的qq程序
        String myNotePadcommand = "E:\\Program Files\\Notepad++\\notepad++.exe"; //啓動windows下的notepad程序
        String myNotePadobject= "C:\\Users\\evan\\Desktop\\files.txt";//notepad程序用於打開的應用
        String myJavacommand = "java";//運行java指令
        String myJavaobject = "com.test.process.MyClass";//指定Java運行的類對象
  • 環境:是從變量到值的依賴於系統的映射。
  • 工做目錄:默認值是當前進程的當前工做目錄,一般根據系統屬性 user.dir 來命名。
  • redirectErrorStream 屬性:最初,此屬性爲 false,意思是子進程的標準輸出和錯誤輸出被髮送給兩個獨立的流,這些流能夠經過 Process.getInputStream() 和 Process.getErrorStream() 方法來訪問。

多進程間的通訊線程

進程間通訊的方法有:設計

  • 管道( pipe ):管道是一種半雙工的通訊方式,數據只能單向流動,並且只能在具備親緣關係的進程間使用。
    • 進程的親緣關係一般是指父子進程關係。
    • 備註: 
      • 一、子進程的輸出內容是沒法在控制檯輸出的,只能再父類中獲取並輸出。 
        二、父進程往子進程寫內容時若是關閉字節流,則子進程的輸入流同時關閉。 
        三、若是父進程中輸入、輸出流都不關閉,子進程獲取的字節流在達到8129byte時才返回。 
        四、關閉子進程必定要在父進程中關閉 p.destroy() 
  • 套接字( socket ) : 套接字也是一種進程間通訊機制,與其餘通訊機制不一樣的是,它可用於不一樣及其間的進程通訊。
  • 共享內存( shared memory ) :共享內存就是映射一段能被其餘進程所訪問的內存,
    • 這段共享內存由一個進程建立,但多個進程均可以訪問。
    • 共享內存是最快的 IPC 方式,它是針對其餘進程間通訊方式運行效率低而專門設計的。
    • 它每每與其餘通訊機制,如信號量,配合使用,來實現進程間的同步和通訊。
  • 信號量( semophore ) : 信號量是一個計數器,能夠用來控制多個進程對共享資源的訪問。
    • 它常做爲一種鎖機制,防止某進程正在訪問共享資源時,其餘進程也訪問該資源。
    • 所以,主要做爲進程間以及同一進程內不一樣線程之間的同步手段。
  • 消息隊列( message queue ) : 消息隊列是由消息的鏈表,存放在內核中並由消息隊列標識符標識。
    • 消息隊列克服了信號傳遞信息少、管道只能承載無格式字節流以及緩衝區大小受限等缺點。
  • 信號 ( sinal ) : 信號是一種比較複雜的通訊方式,用於通知接收進程某個事件已經發生。
相關文章
相關標籤/搜索