Javaのマルチスレッド - スレッド間通信を達成するために、パイプ・フロー

パイプラインの流れ

Java言語では、入力/出力ストリームストリームの多様を提供し、私たちは簡単に別のスレッドとの間で直接データを転送するために、特別なパイプラインの流れでデータを操作することを可能にします。出力パイプ・フローにデータを送信するスレッドが、別のスレッドは、入力ストリーム導管からデータを読み出します。

同様の一時ファイルのようなものに頼ることなく、異なるスレッド間の通信のためのパイプを使用することにより。

バイトストリーム

PipedInputStream 和 PipedOutputStream

文字ストリーム

PipedReader和PipedWriter

 

例:

パブリック クラスPipeStreamTest {
     公共 静的 ボイドメイン(文字列[]引数)がスローにIOException、InterruptedExceptionある{ 
        書き込みデータ書き込みデータ = 新しい書き込みデータを(); 
        READDATAて、readData = 新しいREADDATA(); 

        PipedReaderリーダー = 新しいPipedReader()。
        PipedWriterライター = 新しいPipedWriter(); 

        writer.connect(リーダー)。

        新しいスレッド(() - > { 
            writeData.writeMethod(ライター); 
        }))(開始。

        Thread.sleep(2000年); 

        新しいスレッド(() - > { 
            readData.readMethod(リーダ); 
        }))(開始。
    } 

    静的 クラスWRITEDATA {
         公共 writeMethod(PipedWriterライター){
             試み{ 
                System.out.printlnは( "書き込み:" );
                以下のためにINT I 0 =; I <300; I ++ ){ 
                    文字列OUTDATA = "" +(I + 1 )。
                    writer.write(OUTDATA)。
                    System.out.print(OUTDATA)。
                }
                System.out.println(); 
                writer.close(); 
            } キャッチ(IOExceptionを電子){ 
                e.printStackTrace(); 
            } 
        } 
    } 

    静的 クラスREADDATA {
         公共 ボイドreadMethod(PipedReaderリーダ){
             試み{ 
                するSystem.out.println( "読み出し" )。
                CHAR [] BYTEARRAY = 新しい CHAR [20 ]。
                INT readLength = reader.read(BYTEARRAY)。
                同時に(readLength!= -1 ){
                    ストリングあるnewDataは = 新しい文字列(BYTEARRAY、0 、readLength)。
                    System.out.print(あるnewData)。
                    readLength = reader.read(BYTEARRAY)。
                } 
                のSystem.out.println(); 
                )(reader.close。
            } キャッチ(IOExceptionを電子){ 
                e.printStackTrace(); 
            } 
        } 
    } 
}

結果は以下の通りであります:

 

おすすめ

転載: www.cnblogs.com/lkc9/p/12528466.html