2019独角兽企业重金招聘Python工程师标准>>>

1.管道输入/输出流类

分为两类,字节流管道类(PipedInputStream/PipedOutputStream)和字符流管道类(PipedReader/ PipedWriter)。这两个IO流实现了可以在不同的任务中对同一个管道进行读写操作,这个模型可以看成是“生产者消-费者模式”的变体,管道是一个阻塞队列。

import java.io.IOException;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;
import java.io.PipedReader;
import java.io.PipedWriter;
import java.util.Scanner;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;public class PipeIO {public static void main(String[] args) {ReadPipe read=new ReadPipe();WritePipe write=new WritePipe();ExecutorService exec=Executors.newCachedThreadPool();try {write.getWriter().connect(read.getRead());;//必须将两个管道进行连接,然后才可进行线程间的数据交互exec.execute(read);exec.execute(write);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}
class ReadPipe implements Runnable{PipedReader read=new PipedReader();public PipedReader getRead(){return  read;}@Overridepublic void run() {try {while(true){System.out.println("read:"+(char)read.read()+";");//当前线程从管道读取数据}  } catch (IOException e) {// TODO: handle exception}}
}
class WritePipe implements Runnable{PipedWriter writer=new PipedWriter();public PipedWriter getWriter(){return  writer;}@Overridepublic void run() {try {while(true){for(char a='A';a<='z';a++){writer.write(a);//当前线程向管道输出数据TimeUnit.SECONDS.sleep(2);}}  } catch (IOException e) {// TODO: handle exception}catch (InterruptedException e) {// TODO: handle exception}}
}

转载于:https://my.oschina.net/ProgramerLife/blog/1806422

线程间的协作(3)——管道输入/输出流相关推荐

  1. java线程协作_java 线程间的协作

    [java]代码库import java.util.Vector; /** * 线程间的协作 */ public class WaitNotify { /** * 打印信息的类,是一个线程. */ s ...

  2. 线程join_Java 并发编程:线程间的协作(wait/notify/sleep/yield/join)

    点击上方"Coder编程",选择"置顶公众号" 技术文章第一时间送达! 并发编程.png 每天进步一点,不做curd工程师与Api调用工程师 欢迎访问 个人博客 ...

  3. 线程间的协作(2)——生产者与消费者模式

    2019独角兽企业重金招聘Python工程师标准>>> 1.何为生产者与消费者 在线程世界里,生产者就是生产数据的线程,消费者就是消费数据的线程. import java.util. ...

  4. 19、Java并发编程:线程间协作的两种方式:wait、notify、notifyAll和Condition

    Java并发编程:线程间协作的两种方式:wait.notify.notifyAll和Condition 在前面我们将了很多关于同步的问题,然而在现实中,需要线程之间的协作.比如说最经典的生产者-消费者 ...

  5. Java并发编程—线程间协作方式wait()、notify()、notifyAll()和Condition

    原文作者:Matrix海 子 原文地址:Java并发编程:线程间协作的两种方式:wait.notify.notifyAll和Condition 目录 一.wait().notify()和notifyA ...

  6. JAVA线程间协作:wait.notify.notifyAll

    欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...

  7. 线程间协作的两种方式:wait、notify、notifyAll和Condition

    转载自  线程间协作的两种方式:wait.notify.notifyAll和Condition 在前面我们将了很多关于同步的问题,然而在现实中,需要线程之间的协作.比如说最经典的生产者-消费者模型:当 ...

  8. 从头开始进行CUDA编程:线程间协作的常见技术

    转载:Deephub Imba 在前一篇文章中,我们介绍了如何使用 GPU 运行的并行算法.这些并行任务是那些完全相互独立的任务,这点与我们一般认识的编程方式有很大的不同,虽然我们可以从并行中受益,但 ...

  9. 看了这篇文章,就别担心线程间的通信了!

    线程间的通信 1.为什么需要线程通信 线程是操作系统调度的最小单位,有自己的栈空间,可以按照既定的代码逐步的执行,但是如果每个线程间都孤立的运行,那就会造资源浪费.所以在现实中,我们需要这些线程间可以 ...

最新文章

  1. 客快物流大数据项目(八):Docker的安装和启动
  2. HDU - 5875 2016 ACM/ICPC 大连网络赛 H题 暴力
  3. hdu 3666 THE MATRIX PROBLEM
  4. Spring之DAO二
  5. set和multiset容器简介
  6. Gradle自定义插件
  7. linux传几百G文件,为什么我不推荐另外2种快速传几百G文件的方法!
  8. ios13看怎么airpods电量_你的iPhone升级iOS13了吗?iOS13升级前,必知的七大新功能...
  9. 计算机四进制表示形式,1.4.2 二进制数的四种表示形式(1)
  10. 500 Internal Server Error
  11. Windows phone 8.1 MessageBox 变了哦!
  12. 机器学习之线性回归(机器学习基石)
  13. Solaris系统环境变量声明方法
  14. 孙玄:“玄姐”,特立独行的架构师
  15. 软件设计师中级-笔记
  16. C#条形码图像生成库
  17. ckplayer 网页视频播放插件
  18. Windows资源管理器占用CPU过高
  19. extern 详细用法
  20. c语言中文拼音排序,为sqlite增加汉字拼音排序功能

热门文章

  1. cass生成曲线要素文件_几种常见的CASS字体异常问题,教你如何解决
  2. Adobe网页无法访问服务器,Adobe Acrobat时提示“无法访问网络位置\startup”
  3. c语言编写一个函数判断闰年,C语言:实现一个函数判断year是不是闰年
  4. php 数组区删除重复的,php – 从数组中删除重复的项目
  5. SSH项目中根据Hibernate的映射文件生成数据库表的方案:
  6. linux mint安装步骤,Linux mint 安装步骤
  7. 剑指offer:33-37记录
  8. 如何在Appscale下发布自己的应用(二)
  9. VS Studio报错无法解析的外部符号 _imp_XXXXXXXXX
  10. Java 序列化反序列化框架比较