1. 程式人生 > >JAVA 多程序 概念 建立 通訊

JAVA 多程序 概念 建立 通訊

父程序測試類: 

package com.test.process.pipe; 
import java.io.IOException; 
public class ProcessTest { 
static void main(String[] args) throws IOException, InterruptedException { 
    Process p = Runtime.getRuntime().exec("java com.test.process.pipe.MyTest"); 
    StringBuilder sbuilder = new StringBuilder(); 
    for(int k=0;k<1;k++){ 
        sbuilder.append("hello"); 
    } 
    int outSize = 1; 
    TestOut out[] = new TestOut[outSize]; 
    for(int i=0;i<outSize;i++){ 
        out[i] = new TestOut(p,sbuilder.toString().getBytes()); 
        new Thread(out[i]).start(); 
    } 
    int inSize = 1; 
    TestIn in[] = new TestIn[inSize]; 
    for(int j=0;j<inSize;j++){ 
        in[j] = new TestIn(p); 
        new Thread(in[j]).start(); 
    } 
} 
} 

子程序測試類 

package com.test.process.pipe; 
import java.io.BufferedReader; 
import java.io.InputStreamReader; 
public class MyTest { 
public static void main(String[] args) throws Exception { 
    //讀取父程序輸入流 
    BufferedReader bfr = new BufferedReader(new InputStreamReader(System.in)); 
    while (true) { 
        String strLine = bfr.readLine(); 
        if (strLine != null) { 
            System.out.println(strLine);//這個地方的輸出在子程序控制檯是無法輸出的,只可以在父程序獲取子程序的輸出 
        }else { 
            return; 
        } 
    } 
} 
} 

TestIn類 

package com.test.process.pipe; 
import java.io.BufferedReader; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
public class TestIn implements Runnable{ 
private Process p = null; 
public TestIn(Process process){ 
    p = process; 
    } 
    @Override 
    public void run() { 
    try { 
        InputStream in = p.getInputStream(); 
        BufferedReader bfr = new BufferedReader(new InputStreamReader(in)); 
        String rd = bfr.readLine(); 
        if(rd != null){ 
        System.out.println(rd);//輸出子程序返回資訊(即子程序中的System.out.println()內容) 
    }else{ 
        return; 
    } 
    //注意這個地方,如果關閉流則子程序的返回資訊無法獲取
    //bfr.close(); 
    //in.close(); 
    } catch (Exception e) { 
        e.printStackTrace(); 
    } 
} 
} 

TestOut類 

package com.test.process.pipe; 
import java.io.IOException; 
import java.io.OutputStream; 
public class TestOut implements Runnable { 
    private Process p = null; 
    private byte []b = null; 
    public TestOut(Process process,byte byt[]){ 
        p = process; 
        b = byt; 
    } 
    @Override 
    public void run() { 
        try { 
            OutputStream ops = p.getOutputStream(); 
            //System.out.println("out--"+b.length); 
            ops.write(b); 
            //注意這個地方如果關閉,則父程序只可以給子程序傳送一次資訊,如果這個地方開啟close()則父程序給子程序不管傳送大小多大的資料,子程序都可以返回 
            //如果這個地方close()不開啟,則父程序給子程序傳送資料累加到8192子程序才返回。 
            //ops.close(); 
            } catch (IOException e) { 
                e.printStackTrace(); 
            } 
    } 
} 

備註: 

1、子程序的輸出內容是無法在控制檯輸出的,只能再父類中獲取並輸出。 
2、父程序往子程序寫內容時如果關閉位元組流,則子程序的輸入流同時關閉。 
3、如果父程序中輸入、輸出流都不關閉,子程序獲取的位元組流在達到8129byte時才返回。 
4、關閉子程序一定要在父程序中關閉 p.destroy() 

相關推薦

JAVA 程序 概念 建立 通訊

父程序測試類:  package com.test.process.pipe; import java.io.IOException; public class ProcessTest { static void main(String[] args) throws IOException, Inte

java 執行緒之通訊

共享堆記憶體變數屬於通訊的一種,今天要介紹的是使用Object類中的wait和notify方法進行通訊,可以讓兩個執行緒共同地輪流做一件事 再看Object類:Object類是所有類的根父類,現在主要介紹wait方法和notify方法 void wait()讓當前執行緒進入等待狀態,直到別的

Python程序程式設計及程序間的通訊,資料傳輸

多程序程式設計及程序間的通訊 意義:充分利用計算機的資源提高程式的運算速率 定義:通過應用程式利用計算機多個核心達到同時執行多個任務的目的,以此提高計算機的執行速率 實施方案:多程序 多執行緒 並行: 計算機同時處理多個任務 併發:同時處理多個任務,核心在不斷的任務間小虎切換,達到好像還都在處理執行的

Java執行緒建立的三種方式與對比

一、繼承Thread類建立執行緒類 1、定義Thread類的子類,並重寫該類的run()方法,該run()方法的方法體代表了執行緒需要完成的任務,即執行緒的執行體。 2、建立Thread子類的例項,即建立執行緒物件。 3、呼叫執行緒物件的start()方法來啟動該執行緒

Java執行緒-----建立執行緒的三種方式

   1.繼承Thread類建立執行緒 定義Thread類的子類,並重寫該類的run()方法,該方法的方法體就是執行緒需要完成的任務,run()方法也稱為執行緒執行體 建立Thread子類的例項,也就是建立了執行緒物件 啟動執行緒,即呼叫執行緒的start()方法

java執行緒之間通訊

1 實現一個執行緒+1 一個執行緒 -1 class Share511 { public int a = 0; } class Thread552 implements Runnable{ Share511 share; @Override public void run() {

Linux socket通訊(程序Linux socket通訊(TCP))

#include<stdio.h> #include <sys/socket.h> #include<string.h> #include <arpa/inet.h> #include <unistd.h> #include <net

Java程序執行緒的區別

作業系統中的多工:在同一時刻執行多個程式的能力。作業系統將CPU的時間片分配給每一個程序,給人並行處理的感覺。         多執行緒程式在較低的層次上擴充套件了多工的概念:一個程式同時執行多個任務。通常,每一個任務稱為一個執行緒。可以同時執行一個以上執行緒的程式稱為是多

java程序執行緒

一、程序通訊方法 在說明執行緒通訊前,有必要對程序通訊進行說明; 程序間通訊的方法主要有以下幾種:  (1)管道(Pipe):管道可用於具有親緣關係程序間的通訊,允許一個程序和另一個與它有共同祖先的程序之間進行通訊。  (2)命名管道(named pipe):命名管道克服了

Java面試--程序間的通訊方式

面試題:程序間的通訊方式(VIVO、阿里巴巴面試題) 面試題:程序通訊方式有哪些,問我分別怎麼使用,管道有哪些型別,各有什麼優缺點。(百度面試題) 一、程序通訊的目的 1、資料傳輸

快速入門android AIDL(開啟程序並進行通訊

為何要開啟多程序?主要有兩種情況:一、一個應用由於自身需要採用多程序模式來實現。比如播放器之類,如果僅僅在service中執行會影響主執行緒的響應速度,很可能會造成ANR,一般情況下不會這麼寫;如果僅僅在子執行緒中執行,一旦開啟該執行緒的Activity被殺死後,執行緒也被殺

node程序建立與守護

node是單執行緒執行,我們的node專案如何利用多核CPU的資源,同時提高node服務的穩定性呢? 1. node的單執行緒 程序是一個具有一定獨立功能的程式在一個數據集上的一次動態執行的過程,是作業系統進行資源分配和排程的一個獨立單位,是應用程式執行的載體。 執行緒是程式執行中一個單一的順序控制流,它存在

-1-5 java 執行緒 概念 程序 執行緒區別聯絡 java建立執行緒方式 執行緒組 執行緒池概念 執行緒安全 同步 同步程式碼塊 Lock鎖 sleep()和wait()方法的區別 為什麼wait(),notify(),notifyAll()等方法都定義在O

 本文關鍵詞: java 多執行緒 概念 程序 執行緒區別聯絡 java建立執行緒方式 執行緒組 執行緒池概念 執行緒安全 同步 同步程式碼塊 Lock鎖  sleep()和wait()方法的區別 為什麼wait(),notify(),notifyAll()等方法都定義在Object類中 多執行緒

java建立執行緒&建立程序

概述 併發和並行是即相似又有區別: 並行:指兩個或多個事件在同一時刻發生; 併發:指兩個或多個事件在同一時間段內發生。 程序是指一個記憶體中執行中的應用程式。每個程序都有自己獨立的一塊記憶體空間,一個應用程式可以同時啟動多個程序。比如在Windows系統中,一個執行的abc.exe就是一個程序。 那麼我們

Java執行緒的實現(程序與執行緒的概念Java繼承Thread類實現執行緒、Java實現Runnable介面實現執行緒、Thread與Runnable的區別、實現Callable介面實現執行緒)

1 程序與執行緒 1.1 程序與執行緒的概念 什麼是程序?   程序: 作業系統中一個程式的執行週期。(比如我們想要在電腦上登入QQ,從雙擊qq按鈕---->關閉qq這個過程就是一個程序)   多程序: 同一時刻跑多個程式。   在DOS(磁碟作業系統時

執行緒、程序通訊java實現)

程序間通訊方式1.管道(匿名管道 Pipe)//   PipedInputStream  、PipedOutputStream2.命名管道(NamedPipe/FIFO)//java 不支援?3.訊號(Signal) // wait() notify() notifyall(

[Java 執行緒技術](一)執行緒和程序以及並行和併發的概念

程序與執行緒 1、 程序(Process)是計算機中的程式關於某資料集合上的一次執行活動,是系統進行資源分配和排程的基本單位,是作業系統結構的基礎。在早期面向程序設計的計算機結構中,程序是程式的基本執行實體;在當代面向執行緒設計的計算機結構中,程序是執行緒的容

java線程_01_線程的基本概念

bool 我們 優先 try 立即執行 合並 abcde rup unix 線程:一個程序裏邊不同的執行路徑 例子程序:這個例子程序是一條執行路徑。這個程序只有一個分支,就是main方法,叫主線程 public static void main(String[]

一個個數相加的結果的java程序

一個 util sca 求和 程序流程圖 class 思想 method ati 題目:模仿JavaAppArguments.java實例,編寫一個程序,此程序從命令行接受多個數字,求和之後輸出。 1.設計思想 輸入的參數都是字符串,要先將其妝化為數字,才能相加。因為不知道

java 線程的基本概念

java 概念 操作 進程 多線程 數據 進行 發生 程序 進程: 進程是操作系統結構的基礎,是程序的一次運行,是一個程序及其數據在處理機上順序執行時所發生的活動,是程序在一個數據集合上運行的過程,它是系統進行資源分配和調度的一個單位 線程: 線程是程序執行的一