`
粟谷_sugu
  • 浏览: 25530 次
社区版块
存档分类
最新评论

java线程同步之管道通信

    博客分类:
  • java
阅读更多
之前看书的时候就看过,线程之间通信的两种方式,共享变量和管道通信,一直不知道管道通信是什么,今天终于看到了,话不多数,直接show the code
public class Pipe {
    public static void main(String[] args) throws IOException, InterruptedException {
        PipedWriter out = new PipedWriter();
        PipedReader in = new PipedReader();
        int recive = 0;
        out.connect(in);
        Thread printThread = new Thread(new PrintThread(in),"printThread");
        TimeUnit.SECONDS.sleep(5);
        printThread.start();
        while ((recive = System.in.read()) != -1){
            out.write(recive);
        }
    }
    static class PrintThread implements Runnable{

        private PipedReader in;

        public PrintThread(PipedReader in) {
            this.in = in;
        }

        public void run() {
            try {
                int recive = 0;
                while ( (recive = in.read())  != -1){
                    System.out.print( (char) recive);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

//控制台输出:
123
printThread 1
printThread 2
printThread 3

注意一点就是
        out.connect(in);

这一句,其实很好理解,两个管道要连通才可以生效,不然就会出问题
分享到:
评论

相关推荐

    疯狂JAVA讲义

    学生提问:为什么有栈内存和堆内存之分? 93 4.6.2 基本类型数组的初始化 95 4.6.3 引用类型数组的初始化 96 4.6.4 没有多维数组 99 学生提问:我是否可以让图4.13中灰色覆盖的数组元素再次指向另一个数组?这样...

    Java典型模块

    第7章 生产者与消费者问题(线程通信知识) 7.1 生产者与消费者原理 7.1.1 项目结构框架分析 7.1.2 项目功能业务分析 7.2 无线程通信的生产者与消费者项目 7.2.1 生产者类 7.2.2 消费者类 7.2.3 储存库类 7.2.4 测试...

    JAVA程序设计教程

    Java程序.............................................................................................6 1.3.1 Java程序的结构 ...........................................................................

    Java开发技术大全 电子版

    8.4线程的通信与协调277 8.4.1线程的互斥277 8.4.2线程的同步279 8.4.3暂停、恢复和停止线程282 8.4.4生产者-消费者问题实例284 8.5本章小结287 第9章运行时类型识别288 9.1RTTI的作用288 9.2用Class类来...

    CS715:Justin 的 CS715 项目(我和他一起研究 RMI)

    使用管道在三个线程 TA、TB 和 TC 之间创建通信。 TA 将原始数据发送给 TB,对象发送给 TC。 TB 会回复一个对象给 TA。 TC 将对象数据发送到 TB。 不要创建不必要的管道 如何运行: 通过以下hw6.Main.java启动...

    jsr80 java 访问 usb

    这些 API 是在 usb.core API 之上构建的,它们可以工作在所有支持 jUSB 的操作系统上。 usb.view : 这个可选包提供了基于 Swing 的 USB 树简单浏览器。它是一个展示 jUSB API 应用的很好的示例程序。 尽管 usb.core....

    java程序设计与开发课件

    4.4.4 管道输入输出流··························· (81) 4.4.5 格式化输出流···························· (81) 4.5 字符级输入输出类··········...

    java区块链源码完整可运行-Programming-Is-Awesome:软件开发框架和工具的集合

    同步和异步通信策略都有其用途,但您应该尽可能使用异步通信来构建微服务系统。 - React式编程是关于异步和事件驱动的非阻塞应用程序,需要少量线程来扩展。 - Reactive Streams 是一项倡议,旨在为具有非阻塞背压的...

    高级UNIX编程 pdf 电子书

    全书共9章,内容包括:基本概念、基本文件I/O、高级文件I/0、终端I/O、进程与线程、基本进程间通信、高级进程间通信、网络技术与套接字,以及信号与定时器等。涉及POSIX、FreeBSD、Solaris、Linux等几大主流系统...

Global site tag (gtag.js) - Google Analytics