3.1.13多线程通讯(字符流)

来源:互联网 发布:slf4j 打印sql 编辑:程序博客网 时间:2024/06/05 03:20

package demo;import java.io.*;/** * Created by sunyifeng on 17/10/16. */public class Run {    public static void main(String[] args) {        try {            WriteData writeData = new WriteData();            ReadData readData = new ReadData();            PipedReader pipedReader = new PipedReader();            PipedWriter pipedWriter = new PipedWriter();            pipedWriter.connect(pipedReader);            // 读            ThreadRead threadRead = new ThreadRead(readData, pipedReader);            threadRead.start();            Thread.sleep(2000);            // 写            ThreadWrite threadWrite = new ThreadWrite(writeData, pipedWriter);            threadWrite.start();        } catch (IOException e) {            e.printStackTrace();        } catch (InterruptedException e) {            e.printStackTrace();        }    }}
package demo;import java.io.IOException;import java.io.PipedWriter;/** * Created by sunyifeng on 17/10/16. */public class WriteData {    public void writeMethod(PipedWriter pipedWriter) {        try {            System.out.println("开始写:");            for (int i = 0; i < 100; i++) {                String outData = "" + (i + 1);                pipedWriter.write(outData);                System.out.print("写[" + outData + "]");            }            System.out.println();            pipedWriter.close();        } catch (IOException e) {            e.printStackTrace();        }    }}
package demo;import java.io.PipedInputStream;import java.io.PipedReader;/** * Created by sunyifeng on 17/10/16. */public class ThreadRead extends Thread {    private ReadData readData;    private PipedReader pipedReader;    public ThreadRead(ReadData readData, PipedReader pipedReader) {        super();        this.readData = readData;        this.pipedReader = pipedReader;    }    @Override    public void run(){        readData.readMethod(pipedReader);    }}
package demo;import java.io.PipedWriter;/** * Created by sunyifeng on 17/10/16. */public class ThreadWrite extends Thread {    private WriteData writeData;    private PipedWriter pipedWriter;    public ThreadWrite(WriteData writeData, PipedWriter pipedWriter) {        super();        this.writeData = writeData;        this.pipedWriter = pipedWriter;    }    @Override    public void run(){        writeData.writeMethod(pipedWriter);    }}
package demo;import java.io.*;/** * Created by sunyifeng on 17/10/16. */public class Run {    public static void main(String[] args) {        try {            WriteData writeData = new WriteData();            ReadData readData = new ReadData();            PipedReader pipedReader = new PipedReader();            PipedWriter pipedWriter = new PipedWriter();            pipedWriter.connect(pipedReader);            // 读            ThreadRead threadRead = new ThreadRead(readData, pipedReader);            threadRead.start();            Thread.sleep(2000);            // 写            ThreadWrite threadWrite = new ThreadWrite(writeData, pipedWriter);            threadWrite.start();        } catch (IOException e) {            e.printStackTrace();        } catch (InterruptedException e) {            e.printStackTrace();        }    }}
运行结果:

开始读:
开始写:
写[1]写[2]写[3]写[4]写[5]写[6]写[7]写[8]写[9]写[10]写[11]写[12]写[13]写[14]写[15]写[16]写[17]写[18]写[19]写[20]写[21]写[22]写[23]写[24]写[25]写[26]写[27]写[28]写[29]写[30]写[31]写[32]写[33]写[34]写[35]写[36]写[37]写[38]写[39]写[40]写[41]写[42]写[43]写[44]写[45]写[46]写[47]写[48]写[49]写[50]写[51]写[52]写[53]写[54]写[55]写[56]写[57]写[58]写[59]写[60]写[61]写[62]写[63]写[64]写[65]写[66]写[67]写[68]写[69]写[70]写[71]写[72]写[73]写[74]写[75]写[76]写[77]写[78]写[79]写[80]写[81]写[82]写[83]写[84]写[85]写[86]写[87]写[88]写[89]写[90]写[91]写[92]写[93]写[94]写[95]写[96]写[97]写[98]写[99]写[100]
读[12345678910111213141]读[51617181920212223242]读[52627282930313233343]读[53637383940414243444]读[54647484950515253545]读[55657585960616263646]读[56667686970717273747]读[57677787980818283848]读[58687888990919293949]读[596979899100]

程序分析:

两个线程通过管道进行数据传输。

原创粉丝点击