java多线程之管道流
java语言中提供了各种各样的流供我们操纵数据,其中管道流(pipeStream)是一种特殊的流,用于在不同线程间直接传送数据。
一个线程发送数据到输出管道,另一个线程从输入管道读取数据,通过使用管道,实现不同线程间的通信,而无需借助于临时文件之类的东西。
在java jdk中提供了4个类用于线程间通信,分别是字节流和字符流,应用起来大体相同:
1.PipedInputStream和PipedOutputStream
2.PipedReader和PipedWriter
public class WriteData { public void writeMethod(PipedWriter out){ try { System.out.println("write:"); for (int i = 0; i < 100; i++) { String data=""+i; out.write(data); System.out.print(data); } System.out.println(); out.close(); } catch (IOException e) { e.printStackTrace(); } } } public class ReadData { public void readMethod(PipedReader in){ try { System.out.println("read:"); char[] byteArray = new char[20]; int readLength=in.read(byteArray); while (readLength!=-1){ String newData = new String(byteArray, 0, readLength); System.out.print(newData); readLength=in.read(byteArray); } System.out.println(); in.close(); } catch (IOException e) { e.printStackTrace(); } } } public class ThreadWrite extends Thread { private WriteData write; private PipedWriter out; public ThreadWrite(WriteData write, PipedWriter out) { this.write = write; this.out = out; } @Override public void run() { write.writeMethod(out); } } public class ThreadRead extends Thread{ private ReadData read; private PipedReader in; public ThreadRead(ReadData read, PipedReader in) { this.read = read; this.in = in; } @Override public void run() { read.readMethod(in); } } public class Run { public static void main(String[] args) { try { WriteData writeData = new WriteData(); ReadData readData = new ReadData(); PipedWriter pipedWriter = new PipedWriter(); PipedReader pipedReader = new PipedReader(); //通过这一行使得输入流和输出流联系起来 pipedReader.connect(pipedWriter); ThreadWrite threadWrite = new ThreadWrite(writeData, pipedWriter); threadWrite.start(); Thread.sleep(2000); ThreadRead threadRead = new ThreadRead(readData, pipedReader); threadRead.start(); } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗