Java 管道 (学习代码)

news/2024/11/20 4:23:03/

目录

上代码:

输出:

执行流程可以总结如下:


上代码:

package cn.net.cdsz.ccb.test;import java.io.IOException;
import java.io.PipedReader;
import java.io.PipedWriter;public class test {static class ReaderThread implements Runnable {private PipedReader reader;public ReaderThread(PipedReader reader) {this.reader = reader;}@Overridepublic void run() {System.out.println("this is reader");int receive = 0;try {while ((receive = reader.read()) != -1) {System.out.print((char)receive);}System.out.println();} catch (IOException e) {e.printStackTrace();}}}static class WriterThread implements Runnable {private PipedWriter writer;public WriterThread(PipedWriter writer) {this.writer = writer;}@Overridepublic void run() {System.out.println("this is writer");int receive = 0;try {writer.write("test");} catch (IOException e) {e.printStackTrace();} finally {try {writer.close();} catch (IOException e) {e.printStackTrace();}}}}public static void main(String[] args) throws IOException, InterruptedException{PipedWriter writer = new PipedWriter();PipedReader reader = new PipedReader();writer.connect(reader); // 这⾥注意⼀定要连接,才能通信new Thread(new ReaderThread(reader)).start();Thread.sleep(1000);new Thread(new WriterThread(writer)).start();}
}

输出:

执行流程可以总结如下:

  1. 线程 ReaderThread 开始执行,调用管道 readerread() 方法,该方法会一直阻塞,直到有数据可以读取。
  2. 线程 WriterThread 开始执行,调用管道 writerwrite("test") 方法,向管道中写入字符串 "test"。
  3. 线程 WriterThread 调用 writer.close() 方法,结束管道的写入,并执行完毕。
  4. 线程 ReaderThread 接收到管道输出的字符串 "test" 并打印。
  5. 线程 ReaderThread 执行完毕,程序结束。

简单来说,就是通过管道实现了两个线程之间的通信,其中一个线程往管道写入数据,另一个线程从管道读取数据并进行相应处理。管道的读取和写入操作是阻塞的,也就是说,如果没有数据可以读取,读取操作会一直等待,直到有数据可读;同样,如果管道已经关闭,写入操作也会失败。这种方式可以很好地实现线程之间的同步和通信。


http://www.ppmy.cn/news/40923.html

相关文章

阿里云产品试用更新,产品组合试用装更划算,快来免费上云吧

最近阿里云产品又上新了,尤其是推出了最新的产品组合试用装,个人觉得阿里云关于云产品的更新迭代是非常重视的,而且每次推出的产品不仅会惊艳到用户,而且产品功能也是随着一次迭代而更加完善、强大。前段时间也写了一篇关于为什么…

多维时序 | MATLAB实现CNN-LSTM-Attention多变量时间序列预测

多维时序 | MATLAB实现CNN-LSTM-Attention多变量时间序列预测 目录多维时序 | MATLAB实现CNN-LSTM-Attention多变量时间序列预测预测效果基本介绍模型描述程序设计参考资料预测效果 基本介绍 MATLAB实现CNN-LSTM-Attention多变量时间序列预测,CNN-LSTM结合注意力机制…

【软件安装】图数据库_Neo4j下载与安装配置详解

【软件安装】图数据库_Neo4j安装下载详解 文章目录【软件安装】图数据库_Neo4j安装下载详解1. 前言2. 下载Neo4j3. 安装 配置3.1 解压3.2 配置4. 启动Neo4j5. 参考1. 前言 因为使用Neo4j时默认是需要java-jdk的支持,因此在下载neo4j之前,需要下载jdk&a…

有限元基础编程-何晓明老师课件-一维程序实现matlab

文章目录前言一、主程序二、一维有限元求解程序-框架三、组装刚度矩阵assemble_matrix_from_1D_integral.m2.1 算法2.2 get_standard_gauss_1D.m2.3 get_Gauss_local_1D.m前言 只是为方便学习,不做其他用途,课程理论学习来自b站视频有限元基础编程-何晓明…

软件测试别再说简历项目不会写了,给你安排的明明白白

目录 个人信息 职业技能 工作经历 项目经历 工作经历 项目经历 教育经历 自我评价 个人信息 姓 名:xxx 性 别:女 手 机:xxxxxxxxxxxx 最高学历:统招硕士 工作年限:3 年 职…

docker镜像深入学习,docker镜像发布公有云与私有云

文章目录一、docker镜像概述1、什么是docker镜像2、镜像的分层3、什么是UnionFS(联合文件系统)4、 Docker镜像加载原理5、为什么 Docker 镜像要采用这种分层结构二、Docker镜像commit操作1、使用示例三、本地镜像发布到阿里云1、创建一个新的镜像2、在阿…

fl studio 21打不开,FL工程文件也打不开怎么办?

FL Studio 21全称Fruity Loops Studio,就是大家熟悉的水果编曲软件,一个全能的音乐制作软件,包括编曲、录音、剪辑和混音等诸多功能,让你的电脑编程一个全能的录音室。FL Studio 21版本发布了,为我们带来了多种新功能&…