管道流(pipeStream)是一种特殊的流,用于在不同线程间直接传送数据。一个线程发送数据到输出管道,另一个线程从输入管道中读数据。通过管道,实现不同线程间的通信,而无须借助类似共享变量、临时文件之类的东西。

在java的JDK中提供了4个类来使线程间可以进行通信:管道字节流 PipedInputStream,PipedOutputStream

管道字符流 PipedReader,PipedWriter

案例

应用场景:1个线程负责写数据,1个线程负责接收数据。

写入线程:class ThreadOut extends Thread {

PipedOutputStream out;

public ThreadOut(PipedOutputStream out) {

this.out = out;

}

@Override

public void run() {

System.out.println("write:");

try {

String message = "hello world! You will be destoryed";

out.write(message.getBytes());

System.out.println("写入数据------" + message);

out.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

接收线程:class ThreadRead extends Thread {

PipedInputStream input;

public ThreadRead(PipedInputStream input) {

this.input = input;

}

@Override

public void run() {

System.out.println("read:");

try {

byte[] buffer = new byte[10];

int i = -1;

while ((i=(input.read(buffer))) != -1) {

System.out.println("读取数据----"+new String(buffer,0,i));

}

input.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

启动类:public class TestPipe {

public static void main(String[] args) throws IOException {

PipedInputStream inputStream = new PipedInputStream();

PipedOutputStream outputStream = new PipedOutputStream();

inputStream.connect(outputStream);

ThreadOut threadOut = new ThreadOut(outputStream);

ThreadRead threadRead = new ThreadRead(inputStream);

threadOut.start();

threadRead.start();

}

}

java线程间通信管道_通过管道进行线程间通信相关推荐

  1. python 命名管道_命名管道实践

    命名管道技术实验 管道介绍 管道(Pipe)是一种进程间的通信机制,Windows.Linux和UNIX都使用这种机制. 管道是通过I/O接口存取的字节流创建管道后,通过使用操作系统的任何读或写I/O ...

  2. 61-Linux_管道_有名管道

    文章目录 管道 1.有名管道 (1)创建有名管道 (2)有名管道演示进程间通信 管道 管道是一种最基本的IPC机制,作用于有血缘关系的进程之间,完成数据传递.调用pipe系统函数即可创建一个管道.有如 ...

  3. 51单片机串口通信模板_深入理解51单片机串口通信及通信实例

    串口通信的原理 串口通信(SerialCommunications)的概念非常简单,串口按位(bit)发送和接收字节.尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一 ...

  4. centos java 时间差8个小时_解决Centos7本机时间与实际时间相差8小时

    GPS系统中有两种时间区分,UTC就0时区的时间,CTS为本地时间,如北京为早上八点(东八区),UTC时间比北京时晚八小时; CTS:China Standard Time,UTC+8:00 中国沿海 ...

  5. 485通信原理_上位机开发之单片机通信实践

    经常会有一些学员会问到上位机与单片机之间通信的问题,而我们经常会讲上位机与PLC之间通信,那么其实对上位机开发来说,不管是和PLC通信,还是和单片机通信,通信原理都是一样的.PLC的本质就是单片机,在 ...

  6. 485通信原理_上位机开发之单片机通信实践(一)

    微信号 :thinger_swj微博:@新阁程序园扫码关注 经常会有一些学员会问到上位机与单片机之间通信的问题,而我们经常会讲上位机与PLC之间通信,那么其实对上位机开发来说,不管是和PLC通信,还是 ...

  7. 微信即时通信原理_福州5号线一期通信系统集成中标

    福州市轨道交通5号线一期工程通信系统集成采购项目中标候选人公示 招标项目概况 工程项目名称:福州市轨道交通5号线一期工程通信系统集成采购项目(重新招标) 招标人名称:福州地铁集团有限公司 建设规模:2 ...

  8. 树莓派串口通信编码_树莓派3B/3B+与Rosbot通信02:USB与串口通信

    前言:在上一篇中,我们已经下载和安装好通信的各种库和其他东西,在这一篇中我们将介绍如何将树莓派与Rosbot连接设置和基础的代码编程. 串口通信 串口设置 1.设置波特率:进入minicom配置界面 ...

  9. python写tcp通信程序_一个简单的基于TCP通信的服务器端与客户端程序

    一,概述 1,客户端: 创建客户端套接字对象 和服务端套接字建立连接 发送数据 接收数据 关闭客户端套接字 2,服务器端: 创建服务端端套接字对象 绑定端口号 设置监听 等待接受客户端的连接请求 接收 ...

最新文章

  1. 《软件测试实践--测试Web MSN》 之我的学习笔记(一)
  2. Xamarin Essentials教程实现数据的传输功能实例
  3. 方位话机同一号码双链路注册实现冗余
  4. JDK 14 调试神器了解一下?
  5. matlab输入集合,matlab关于集合的操作大全
  6. nginx 响应服务器静态,405 Not Allowed,nginx静态文件响应post请求
  7. 2018牛客网暑期ACM多校训练营(第十场)J Rikka with Nickname(二分,字符串)
  8. Palo Alto Networks漏洞防护扩展至云端
  9. android申请多个运行时权限,Android 6.0(API 23) 运行时权限(二)之权限申请
  10. [Ext JS 4] 实战之Grid, Tree Gird编辑Cell
  11. systemctl命令_开发者必备Linux命令
  12. 主进程和子进程_Python - 进程-线程-协程
  13. python怎么获取lol皮肤名称_英雄联盟手游免费皮肤获取攻略 LOL免费皮肤怎么得...
  14. word英文字体下载 如Caecilia LT Std
  15. 腾讯android一键root工具,腾讯一键Root工具
  16. iOS 【使用自定义字体-苹方字体】
  17. uva live 4043 km
  18. 微软TTS语音引擎编程入门
  19. 股票成交量和成交笔数解释
  20. 长铗:搭积木无法建筑DeFi摩天楼,Bytom用工程思维构建MOV宇宙

热门文章

  1. JPA(七):映射关联关系------映射双向多对一的关联关系
  2. 【SVN】1. SVN 安装部署
  3. CocoaPods使用 主要带图。转载。
  4. 解决博客园模版错误排版的一个问题
  5. Citrix XenApp 6.0 发布应用程序时 ICO 错误的解决方法
  6. 部署SQL AZURE的客户端管理工具,云计算体验之二
  7. Delphi - 新语法介绍之For In
  8. C# 中的委托和事件(1)
  9. c语言延时函数_介召几个frida在安卓逆向中使用的脚本以及延时Hook手法
  10. 如何优化计算机网络课程,计算机论文:探究如何优化计算机网络课程教学方法.docx...