多线程之管道流

ESP32-S3 开发板 Arduino 入门:PSRAM 配置、USB 烧录与引脚避坑指南 在嵌入式开发中,选择合适的微控制器往往决定项目迭代效率。ESP32-S3 作为集成双核处理器、Wi-Fi 与 BLE 5.0 的芯片,凭借原生 USB 接口和板载大容量 PSRAM 扩展能力,成为兼顾性能与功能灵活性的热门选择。理解其内存分层机制,掌握 PSRAM 的配置与使用方法,能显著缓解复杂项目的内存焦虑;同时,正确设置 USB CDC 引导模式与驱动参数,是解决设备识别和固件烧录失败的关键。从低功耗传感器节点到轻量 AI 交互终端,ESP32-S3 在需要图形界面、摄像头或自定义 USB 外设的工程 阅读详情

没用过,mark,看代码就行,用法逻辑很简单。

java语言中提供了各种各样的流供我们操纵数据,其中管道流(pipeStream)是一种特殊的流,用于在不同线程间直接传送数据。一个线程发送数据到输出管道,另一个线程从输入管道读取数据,通过使用管道,实现不同线程间的通信,而无需借助于临时文件之类的东西。

在java jdk中提供了4个类用于线程间通信,分别是字节流和字符流,应用起来大体相同:

1.PipedInputStream和PipedOutputStream

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();
        }
    }
}

2.PipedReader和PipedWriter

public class ReadData {

    public void readMethod(PipedReader read){
        try {
            System.out.println("read :");
            char[] byteArray=new char[20];
            int readLength=read.read(byteArray);
            while(readLength!=-1){
                String newData=new String(byteArray, 0, readLength);
                System.out.print(newData);
                readLength=read.read(byteArray);
            }
            System.out.println();
            read.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}


public class WriteData {

    public void writeMethod(PipedWriter out){
        try {
            System.out.println("write :");
            for(int i=0;i<300;i++){
                String outData=""+(i+1);
                out.write(outData);
                System.out.print(outData);
            }
            System.out.println();
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}


public class ThreadReader extends Thread {

    ReadData read;
    
    PipedReader input;
    
    public ThreadReader(ReadData read,PipedReader input){
        this.read=read;
        this.input=input;
    }
    
    public void run(){
        read.readMethod(input);
    }
}


public class ThreadWrite extends Thread {

    WriteData write;
    
    PipedWriter out;
    
    public ThreadWrite(WriteData write,PipedWriter out){
        this.write=write;
        this.out=out;
    }
    
    public void run(){
        write.writeMethod(out); 
    }
}


public class Run {

    public static void main(String[] args) {
        try {
            WriteData writeData=new WriteData();
            ReadData readData=new ReadData();
            
            PipedReader inputStream=new PipedReader();
            PipedWriter outputStream=new PipedWriter();
            outputStream.connect(inputStream);
            
            ThreadReader threadRead=new ThreadReader(readData, inputStream);
            threadRead.start();
            
            Thread.sleep(2000);
            
            ThreadWrite threadWrite=new ThreadWrite(writeData, outputStream);
            threadWrite.start();
            
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 

举例讲解Java中Piped管道输入输出流的线程通信控制 Java中的PipedWriter、PipedReader类管道的读写依赖于PipedOutputStream、PipedInputStream两个管道输入输出类,这里我们将来举例讲解Java中Piped管道输入输出流的线程通信控制: 立即下载

相关推荐

若依框架-实现管理端与用户端的不同页面布局

我们现在要做的是:管理员登录时展示后台管理端,普通用户登录时展示我们自己写的页面。所以我们可以用v-if来判断登录用户的角色,如果用户角色包含admin,说明是管理员,渲染管理端相关组件,否则渲染用户端组件。不过若依作者的本意还是想退出系统后清空角色信息,所以为了保险期间,我们可以在退出系统后,延迟2秒,再单独清空角色信息。当我们登录管理端后,再退出登录,会有那么一瞬间渲染用户页面,然后才是回到登录界面。这个时候,前端检测到角色信息为空,不包含admin,于是就会渲染用户页面。用来延迟 2 秒执行。

m0_74462339的博客 1566

【.Net实用方法总结】 整理并总结System.IO中BufferedStream类及其方法介绍

本文主要介绍System.IO命名空间的BufferedStream 类,介绍其常用的方法和示例说明。

baidu_33146219的博客 2万+

【PVE9.1使用教程】

弹窗代码在 /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js 中,通过 void({…}) 可以让弹窗部分代码不执行,实现删除弹窗的效果。安装过程这里不再赘述,记得不要使用网络版本进行安装,安装的时候不要使用镜像,否则安装过程会很卡。把下面的配置添加进去,允许同一个网段下的所以主机访问/mnt/pve_share文件夹。可以自己搭建也可以去咸鱼购买,本人在咸鱼上面购买的,暂时可用。也可以使用下面的命令,版本号需要自己查看最新的版本号。

weixin_42950821的博客 962

线程间通信(管道流)

说明 java语言中提供了各种输入/输出流,使得我们能够方便的操作数据,其中管道流(PipeStream)是一种特殊的流,可以用于不同线程间直接传送数据。一个线程发送数据到输出管道,另外一个线程从输出管道中读取数据,通过使用管道,可以实现不同线程间的通信,无须借助文件之类的存储介质。在JDK中提供了几个管道流类可以使线程间进行通信:1、PipedInputStream和PipedOutputStr

漫天雪_昆仑巅 1426

第1章:Zephyr 开发环境搭建与 Hello World

📝【摘要】本文是Zephyr RTOS开发入门指南的第一章,详细介绍了从环境搭建到首个应用运行的完整流程。主要内容包括:1️⃣ Zephyr项目结构解析与west工具链部署;2️⃣ 开发环境配置(Linux/WSL)及SDK安装;3️⃣ 两种实践路径——官方HelloWorld样例与自定义应用开发;4️⃣ 实际硬件部署方法(nRF/STM32)及常用west命令速查;5️⃣ 典型问题解决方案。通过qemu_x86模拟器演示了基础打印功能实现,为后续深度开发奠定基础。

hemoparrot的专栏 1361

Echarts之风力风速玫瑰图

风力风速玫瑰图前言改进之路代码如下总结导出与导入 前言 今天上班收到任务,我们老大让我研究一下这个“风速风向玫瑰图”,还说这个是百度的雷达图的变异体,于是乎我直接找的雷达图,但是雷达图没有这种柱形的,都是点线,然后我又找了好久,最后突然在echarts官网上面看到了图1-2,才终于有了思路,原来这个图不是雷达图的变异体,而是极坐标系下的堆叠柱状图,于是就开始我的“改进”之路了。 图1-1 改进之路...

qq_38776605的博客 1万+

C# PipStream流的详解与示例

PipStream流是.NET中用于处理管道的流,它允许你在进程之间传递数据。PipStream流主要用在Windows操作系统的环境下,因为它是基于Windows的管道机制。PipStream流可以用于多种场景,比如进程间通信、命令行工具的输入输出等。StandardOutputPipeStream:用于获取进程的标准输出。StandardInputPipeStream:用于向进程的标准输入写入数据。StandardErrorPipeStream:用于获取进程的标准错误。

qq_35320456的博客 801

STM32H743内存告急?手把手教你用CubeMX+FMC外扩32MB SDRAM(W9825G6KH-6)

本文详细介绍了如何在STM32H743上使用CubeMX和FMC外扩32MB SDRAM(W9825G6KH-6),解决内存不足问题。从硬件选型、CubeMX配置到初始化代码实现,提供完整的配置教程和性能优化技巧,帮助开发者高效扩展内存,适用于图形界面和复杂算法处理。

weixin_30568591的博客 496

PipeStream

Stream 是所有流的抽象基类。 流是字节序列的抽象,例如文件、输入/输出设备、进程中通信管道或 TCP/IP 套接字。 Stream类和其派生的类提供的输入和输出,这些不同类型的一般视图,并使程序员不必了解操作系统和基础设备的具体细节。 流涉及三个基本操作: 您可以从流中读取。 读取是将数据从一个流传送到数据结构,如字节数组。 可以写入流。 写作是数据的数据结构传输到流。 流可以支持查找。 查...

小学生 748

Qt C++:跨平台开发利器

摘要: Qt C++是基于C++的跨平台开发框架,通过元对象系统、信号槽机制及模块化架构实现"一次编写,多端部署"。核心特性包括: 跨平台能力:覆盖桌面(Windows/macOS/Linux)、移动端(iOS/Android)、嵌入式及WebAssembly; 信号与槽:替代传统回调,实现对象间高效通信; UI组件库:200+预制组件支持QSS样式定制; 工具链:Qt Creator集成开发环境提供可视化设计、调试及多平台编译。 广泛应用于工业控制、车载系统、医疗设备及跨平台应用开发,

2202_75382767的博客 1685

PCB印刷电路缺陷检测实战:从数据集准备到模型训练全流程解析

本文详细解析了PCB缺陷检测从数据集准备到模型训练的全流程。重点介绍了PKU-Market-PCB数据集的特点与下载方法,并提供了数据格式转换、模型选择(如YOLOv8)与训练配置的实战代码。针对PCB小目标检测的难点,文章给出了数据分析和模型优化的具体策略,帮助读者构建高效的缺陷检测系统。

weixin_29065791的博客 547

java 管道流 需不需要 关闭_Java管道流

该楼层疑似违规已被系统折叠隐藏此楼查看此楼1、管道流是用来在多个线程之间进行信息传递的Java流,被号称是难使用的流,被使用的频率比较低。它提供了多线程间信息传输的一种有效手段2、管道流包括四个类 PipedOutputStream/PipedWriter和 PipedInputStream/PipedReader3、其中 PipedOutputStream/PipedWriter 是写入者/生...

weixin_39906906的博客 480

173、LLC谐振变换器的PCB设计实战(布线)

LLC谐振变换器PCB设计实战要点 LLC谐振变换器的PCB设计核心在于控制寄生参数,避免高频振铃和EMI问题。功率回路需确保电流路径最短且紧耦合,谐振电容焊盘需加宽以减少发热。驱动走线应独立于功率回路,避免干扰,并合理控制宽度和长度。变压器绕组结构影响共模噪声,建议原边在外层并加屏蔽铜箔。地平面设计需根据功率等级选择整块或分割,大功率下功率地与信号地应单点连接。谐振电流采样推荐四端开尔文电阻以减少电感干扰。散热需优化铜皮和过孔布局,功率器件优先放置顶层。布局应先确定谐振腔,再排布控制电路。经验上需实测寄生

Jack010169的博客 46

java管道流 线程_java 多线程通信之管道流

/*管道流:PipedInputStreamvoidconnect(PipedOutputStreamsrc)使此管道输入流连接到管道输出流srcPipedOutputStreamvoidconnect(PipedInputStreamsnk)在JDK我们看到PipedInputStream中有管道缓冲区,用来接收数据管道流内部在实现时还有大量的对同步数据的处理管道输出流和管道输入流执行...

weixin_39542936的博客 141

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

java linux管道_Java多线程通信之管道流

/*管道流:PipedInputStreamvoid connect(PipedOutputStream src)使此管道输入流连接到管道输出流 srcPipedOutputStreamvoid connect(PipedInputStream snk)在JDK我们看到PipedInputStream中有管道缓冲区,用来接收数据管道流内部在实现时还有大量的对同步数据的处理管道输出流和管道输入流执行...

weixin_39720865的博客 138

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

java 多线程操作的管道流

在学习java的I/O流时我们知道 所有源自Inputstream或者Reader的子类都有一个read()方法。API中说该方法是阻塞式方法:在输入数据可用、检测到流末尾或者抛出异常前,此方法一直阻塞。 下面我们通过管道流来观察这一现象。 类 PipedInputStream 类PipedOutputStream 管道

lucky9322的专栏 997

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

io流-多线程连接管道流

//io流-多线程连接管道流 import java.io.*;class Read implements Runnable//implements Runnable 实现Runnable接口 管道流必须使用多线程,因为PipedInputStream是进程阻塞方法 { private PipedInputStream in;//管道流一生成就要存在 Read(PipedInputS

blacop的博客 628

java 多线程通信之管道流

/*   管道流: PipedInputStream void connect(PipedOutputStream src)  使此管道输入流连接到管道输出流 src PipedOutputStream void connect(PipedInputStream snk)   在JDK我们看到PipedInputStream中有管道缓冲区,用来接收数据 管道流内部在实现时还有大量的对同步数据

jethai的博客 1829

黑马程序员:管道流(PipedInputStream)介绍:IO和多线程结合的类

管道流: IO和多线程结合的类 PipedInputStream和PipedOutputStream 输入输出可以直接进行链接,通过结合线程使用 两个流结合的方法 PipedInputStream(PipedOutputStream src)  {} 可以通过构造函数 也可以通过connec方法 public void connect(PipedOutputStream s

Java notes 1105

java管道流 线程_Java I/O流之管道流-多线程实现

输出管道对象调用write()成员函数输出数据(即向管道的输入端发送数据)输入管道对象调用read()成员函数可以赌气数据(即向管道的输入端获取数据)1.1 线程继承实现 extends threadpackage org.io;import java.io.*;import java.io.IOException;import java.io.PipedInputStream;import ja...

weixin_30184337的博客 181

(IO)管道流的应用---使用多线程技术

管道流---输入流与输出流结合 A线程负责往管道中写数据 B线程负责从管道中读数据   package com.gc.stream; import java.io.IOException; import java.io.PipedInputStream; import java.io.PipedOutputStream; /** * 管道流 * 将输入流与输出流...

一名菜鸟攻城师 183

使用管道流和多线程完成以下任务要求: 一个线程对象t1 会从控制台中不停的读取信息,读到之后把数据交给管道输出流,把数据写到管道里面 ,另一个线程对象t2 不停的使用管道输入流从管道

使用管道流和多线程完成以下任务要求: 一个线程对象t1 会从控制台中不停的读取信息,读到之后把数据交给管道输出流,把数据写到管道里面 ,另一个线程对象t2 不停的使用管道输入流从管道

linbossdeboke的博客 797

Java I/O流之管道流-多线程实现

输出管道对象调用write()成员函数输出数据(即向管道的输入端发送数据) 输入管道对象调用read()成员函数可以赌气数据(即向管道的输入端获取数据)

lanhaics的专栏 1315

java线程 管道流_java多线程通过管道流实现不同线程之间的通信

java中的管道流(pipeStream)是一种特殊的流,用于在不同线程间直接传送数据。一个线程发送数据到输出管道,另外一个线程从输入管道中读取数据。通过使用管道,实现不同线程间的通信,而不必借助类似临时文件之类的东西。jdk提供4个类来使线程建可以进行通信。(1)PipedInputStream与PipedOutputStream(2)PipedReader与PipedWriter(1)Pipe...

weixin_35848310的博客 347
上一篇: windows下重定向命令
下一篇: 单例模式 与 线程安全
MrMoving
博客等级 码龄10年 54粉丝 145原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值