Java multi-hilo - flujo de la tubería para lograr la comunicación entre hilos

flujo de la tubería

En el lenguaje Java proporciona una variedad de flujo de entrada / salida de corriente, nos permite manipular fácilmente los datos, que es una corriente de flujo de tubería especial, para la transferencia de datos directamente entre los diferentes hilos. Un hilo envío de datos al flujo de la tubería de salida, otro hilo para leer datos desde el conducto de flujo de entrada.

Mediante el uso de tubos para la comunicación entre los diferentes hilos, sin tener que recurrir a cosas como los archivos temporales similares.

flujo de bytes

PipedInputStream suma PipedOutputStream

flujo de caracteres

PipedReader 和 PipedWriter

 

Ejemplo:

público  de clase PipeStreamTest {
     públicas  estáticas  void main (String [] args) lanza IOException, InterruptedException {
        WriteData WriteData = nuevo WriteData ();
        ReadData ReadData = nuevo ReadData ();

        Lector PipedReader = nuevo PipedReader ();
        PipedWriter escritor = nuevo PipedWriter ();

        writer.connect (lector);

        nueva rosca (() -> {
            writeData.writeMethod (escritor);
        }).comienzo();

        Thread.sleep ( 2000 );

        nueva rosca (() -> {
            readData.readMethod (lector);
        }).comienzo();
    }

    estática  clase WriteData {
         público  vacío writeMethod (escritor PipedWriter) {
             try {
                System.out.println ( "escritura:" );
                para ( int i = 0; i <300; i ++ ) {
                    Cadena OutData = "" + (i + 1 );
                    writer.write (OutData);
                    System.out.print (OutData);
                }
                System.out.println ();
                writer.close ();
            } Catch (IOException e) {
                e.printStackTrace ();
            }
        }
    }

    estática  clase ReadData {
         público  vacío ReadMethod (lector de PipedReader) {
             tratar {
                System.out.println ( "leer" );
                Char [] bytearray = nuevo  Char [20 ];
                int readLength = reader.read (bytearray);
                mientras que (readLength! = -1 ) {
                    Cadena newData = nuevo String (bytearray, 0 , readLength);
                    System.out.print (newData);
                    readLength = reader.read (bytearray);
                }
                System.out.println ();
                reader.Close ();
            } Catch (IOException e) {
                e.printStackTrace ();
            }
        }
    }
}

Los resultados son los siguientes:

 

Supongo que te gusta

Origin www.cnblogs.com/lkc9/p/12528466.html
Recomendado
Clasificación