当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:16:00  来源:本站整理

<b>Java中操作管道实现线程间的通讯</b>[Java编程]

赞助商链接



  本文“<b>Java中操作管道实现线程间的通讯</b>[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

在Java 语言中,供应了各种各样的输入输出流(stream),使我们可以很便利的对数据举行操作,此中,管道(pipe)流是一种特别的流,用于在差别线程(threads)间直接传送数据.一个线程发送数据到输出管道,另一个线程从输入管道中读数据.通过利用管道,实现差别线程间的通讯.无需告急于近似暂时文件之类的东西.本文在扼要介绍管道的基本概念后,将以一个具体的实例pipeapp加以具体阐明.

1.管道的成立与利用

Java供应了两个特别的专门的类专门用于处理管道,它们就是pipedinputstream类和pipeoutputstream类.

Pipedinputstream代表了数据在管道中的输出端,也就是线程向管道读数据的一端;pipeoutputstream代表了数据在管道中的输入端,也就是线程向管道写数据的一端,这两个类一同利用可以供应数据的管道流.

为了成立一个管道流,我们必须首先成立一个pipeoutstream对象,然后,成立pipeinputstream对象,实比方下:

pipeout= new pipedyoutstream();

pipein= new pipedputsteam(pipepout);

一旦成立了一个管道后,便可以象操作文件一样对管道举行数据的读写.

2.演示程序: pipeapp

利用程序由三个程序构成:主线程(pipeapp.Java)及由主线程启动的两个二级线程(ythread.Java和zthread.Java),它们利用管道来处理数据.程序从一个内容为一行一行"x"字母的"input.txt"文件中读取数据,利用管道传输数据,第一次是操纵线程ythread将数据"x"转换为"y",最后操纵线程zthread将"y"转换为"z",之后,程序在屏幕上显示改正后的数据.

主线程 (pipeapp.Java)

在main()办法中,程序首先成立一个利用对象:pipeapp pipeapp=new pipeapp();

由于程序中流操作都需求利用IOException非常处理,所以设置了一个try块.在try中,为了从源文件中读取数据,程序为"input.txt"文件成立了一个输入流Xfileln,:

fileinputstream xfileln= new fileinputstream("input.txt");

新的输入传播送给changetoy()办法,让线程ythread能读取该文件:

inputstream ylnpipe =pipeapp.changetoy(xfileln);

changetoy()办法成立将输入数据"x"改变到"y"的线程ythread,并返回该线程的输入管道:

inputstream zlnpipe = pipeapp.changetoz(ylnpipe);

changetoz()办法启动将数据从"y"改变到"z"的线程zehread,主程序将利用从changetoz()返回的输入管道.得到以改正的数据.

然后,程序将管道输入流定位到datainputstream对象,使程序可以利用readline()办法读取数据:

datainputstream inputstream = new datainputstream(zlnpiepe);

成立了输入流今后,程序便可以以行一行的读取数据病显示在屏幕上.

  String str= inputstream.readline();
   While(str!=null)
   {
     system.out.println(str);
     str=inputstream.readline();
   }

显示完成之后,程序关闭输入流:

  inputstream.close();
   changetoy()办法


  以上是“<b>Java中操作管道实现线程间的通讯</b>[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .