线程通信-基于字符流管道

通过管道进行线程通信-字符流:

 1 import java.io.IOException;
 2 import java.io.PipedReader;
 3 
 4 /**
 5  *    PipedReader
 6  */
 7 public class ReadData {
 8     
 9     public void readMethod(PipedReader in) {
10         try {
11             System.out.println("read:");
12             char[] byteArray = new char[20];
13             
14             int readLength = in.read(byteArray);//读取字节数组大小的数据到字节数组中
15             
16             while (readLength != -1) {
17                 String newData = new String(byteArray, 0, readLength);
18                 System.out.print(newData);
19                 readLength = in.read(byteArray);
20             }
21             System.out.println();
22             in.close();
23         } catch (IOException e) {
24             e.printStackTrace();
25         }
26     }
27 }
 1 import java.io.IOException;
 2 import java.io.PipedWriter;
 3 
 4 /**
 5  *    PipedWriter
 6  */
 7 public class WriteData {
 8     
 9     public void writeMethod(PipedWriter out) {
10         try {
11             System.out.println("write:");
12             for (int i = 0; i < 300; i++) {
13                 String outData = "" + (i+1);
14                 out.write(outData);
15                 System.out.print(outData);
16             }
17             System.out.println();
18             out.close();
19         } catch (IOException e) {
20             e.printStackTrace();
21         }
22     }
23 }
 1 /**
 2  *    消费线程
 3  */
 4 public class ThreadRead extends Thread {
 5     
 6     private ReadData read;
 7     private PipedReader in;
 8     
 9     public ThreadRead(ReadData read,PipedReader in) {
10         this.read = read;
11         this.in = in;
12     }
13     
14     @Override
15     public void run() {
16         read.readMethod(in);
17     }
18 }
 1 /**
 2  *    生产线程
 3  */
 4 public class ThreadWrite extends Thread {
 5     
 6     private WriteData write;
 7     private PipedWriter out;
 8     
 9     public ThreadWrite(WriteData write,PipedWriter out) {
10         this.write = write;
11         this.out = out;
12     }
13     
14     @Override
15     public void run() {
16         write.writeMethod(out);
17     }
18 }
 1 import java.io.IOException;
 2 import java.io.PipedReader;
 3 import java.io.PipedWriter;
 4 
 5 /**
 6  *    线程通信测试
 7  */
 8 public class Run {
 9 
10     public static void main(String[] args) {
11         try {
12             WriteData write = new WriteData();
13             ReadData read = new ReadData();
14 
15             PipedReader in = new PipedReader();
16             PipedWriter out = new PipedWriter();
17 
18             out.connect(in);
19             
20             ThreadRead threadRead = new ThreadRead(read,in);
21             threadRead.start();
22             
23             Thread.sleep(2000);
24                             
25             ThreadWrite threadWrite = new ThreadWrite(write,out);
26             threadWrite.start();
27         } catch (IOException e) {
28             e.printStackTrace();
29         } catch (InterruptedException e) {
30             e.printStackTrace();
31         }
32     }
33 }

运行结果如下:

  

原文地址:https://www.cnblogs.com/wang1001/p/9566574.html