zoukankan      html  css  js  c++  java
  • 线程通信-基于字符流管道

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

     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 }

    运行结果如下:

      

  • 相关阅读:
    自研Web漏洞扫描器后的几点思考
    ThinkPHP5.x命令执行漏洞分析
    基于keepalived+nginx+upstream的双master热切换+负载均衡实现方案
    每个看源码的人,都有一颗做“爸爸”的心
    程序员路在何方
    请求页式存储管理实验
    处理机调度实验
    JSP中三种弹出对话框的用法《转》
    Jsp——http status 404 问题
    Jsp——response对象
  • 原文地址:https://www.cnblogs.com/wang1001/p/9566574.html
Copyright © 2011-2022 走看看