Java多线程编程3--通过管道线程间通信(字节流、字符流)
来源:互联网 发布:颖儿长相知乎 编辑:程序博客网 时间:2024/06/06 06:38
在Java语言中提供了各种各样的输人/输出流Stream,使我们能够很方便地对数据进行操作,其中管道流(pipeStream)是一种特殊的流,用于在不同线程间直接传送数据。一个线程发送数据到输出管道,另一个线程从输人管道中读数据。通过使用管道,实现不同线程间的通信,而无须借助于类似临时文件之类的东西。
在Java的JDK中提供了4个类来使线程间可以进行通信:
1)PipedInputStream和PipedOutputStream
2)PipedReader和PipedWriter
1、通过管道进行线程间通信:字节流/字符流
public class WriteData { public void writeMethod(PipedOutputStream out) { //字符流这里换成PipeWriter try { System.out.println("write :"); for (int i=0; i<10; i++) { String outData = "" + (i+1); out.write(outData.getBytes()); //字符流这里换成out.write(outData) System.out.print(outData); } System.out.println(); out.close(); } catch (IOException e) { e.printStackTrace(); } }}
public class ReadData { public void readMethod(PipedInputStream input) { //字符流这里换成PipedReader try { System.out.println("read: "); byte[] byteArray = new byte[20]; //字符流这里换成char int readLength = input.read(byteArray); while (readLength != -1) { String newData = new String(byteArray, 0, readLength); System.out.println(newData); readLength = input.read(byteArray); } System.out.println(); input.close(); } catch (IOException e) { e.printStackTrace(); } }}两个自定义线程
public class ThreadWrite extends Thread { private WriteData write; private PipedOutputStream out; //字符流这里换成PipedWriter public ThreadWrite(WriteData write, PipedOutputStream out) { //字符流这里换成PipedWriter this.write = write; this.out = out; } public void run() { write.writeMethod(out); }}
public class ThreadRead extends Thread { private ReadData read; private PipedInputStream input; //字符流这里换成PipedRead public ThreadRead(ReadData read, PipedInputStream input) { //字符流这里换成PipedRead this.read = read; this.input = input; } public void run() { read.readMethod(input); }}
public class Run { public static void main(String[] args) throws InterruptedException, IOException { WriteData writeData = new WriteData(); ReadData readData = new ReadData(); PipedInputStream inputStream = new PipedInputStream(); //字符流用PipedReader PipedOutputStream outputStream = new PipedOutputStream(); //字符流用PipedWriter inputStream.connect(outputStream); //这两个只能用一个 //outputStream.connect(inputStream); ThreadRead threadRead = new ThreadRead(readData,inputStream); threadRead.start(); Thread.sleep(2000); ThreadWrite threadWrite = new ThreadWrite(writeData,outputStream); threadWrite.start(); }}read:
write :
12345678910
12345678910使用代码inputStream.connect(outputStream)或outputStream.connect(inputStream)的作用使两个 Stream之间产生通信链接,这样才可以进行输出输入。
0 0
- Java多线程编程3--通过管道线程间通信(字节流、字符流)
- Java多线程之通过管道线程间通信(字节流、字符流),类ThreadLocal与类InheritableThreadLocal的使用
- 多线程 通过管道进行线程间通信
- JAVA多线程-线程间通信(三)-通过管道进行线程间通信
- Java线程通信-管道流
- Java 多线程(五)——线程通信(共享内存、管道流、wait()、notify()等)
- Java 多线程(五)——线程通信(共享内存、管道流、wait()、notify()等)
- 线程间通信(管道流)
- 3.6线程间的通信:字节流与字符流
- 线程利用管道字节(字符)流进行通信
- java 多线程通信之管道流
- java 线程间的通信 pipedOutStream 和PipedInputStream 管道流
- 多线程编程之线程间的通信——管道通信
- Java多线程编程3--线程间通信--生产者/消费者模式
- 《java多线程编程核心技术》读书笔记3:线程间的通信
- java多线程编程核心技术3-线程间通信
- Java多线程编程核心技术---线程间通信(一)
- Java多线程编程核心技术---线程间通信(二)
- Hadoop常见错误解决
- Qt5.6官网二进制安装包编译出的程序不支持XP的解决办法
- WSAAsyncSelect基于异步通知的网络socket通信案例一
- poj 3275 pascal(珍珠加强版)
- 数组元素颠倒
- Java多线程编程3--通过管道线程间通信(字节流、字符流)
- rman使用文档(备份脚本和恢复)
- eclipse提示功能错乱
- matlab2014a中help与参考页翻译 MATLAB Product Description
- 单例数据库连接池的创建
- list对象只取某个字段组成list<string>,取list的交集
- php之文件上传和下载
- jar2dex遇到的问题总结bad class file magic (cafebabe) or version (0034.0000)
- SIM结构模型(Logical model of SIM)