电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Java 中利用管道實現線程間的通訊

瀏覽:3日期:2024-07-01 10:24:16
內容: 在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()方法 changetoy()方法首先通過傳遞一個參數inputstream給datainputstream對象來定位資源的輸入流,使程序能使用readline()方法從流中讀取數據:datainputstream xfileln =new datainutstream(inputstream);然后,changetoy()創建輸出管道和輸入管道: pipeoutstream pipeout = new pipeoutputstream();pipeinputstream pipeln = new pipedinputsteam(pipeout); 為了能夠使用println()方法輸出修改的后的文本行到管道,程序將輸出管道定位到printstream對象:printstream printstream = new printstream(pipeout);現在,程序可以創建將數據從x改變到y的線程,該線程是ythread類的一個對象,他傳遞兩個參數:輸入文件(xfileln)和輸出管道(調用printstream)ythread ythread =new thread(xfileln,printstream);之后,程序啟動線程:changetoz()方法changetoz()方法與changetoy()方法很相似,他從changetoy()返回的輸入流開始:datainputstream yfileln= new datainputstream(inputstream);程序創建一個新的管道:pipedoutstream pipeout2 = new pipedoutputstream();pipedinputstream pipeln2 = new pipedinputsream(pipeout2); 該線程通過這個新的管道發出修改后的數據(輸入流pipeln2)給主程序。 源程序如下: ////pipeapp.Java-pipeapp的主應用程序//import Java.io.*class pipeapp{public static void main(string[] args){pipeapp pipeapp=new pipeapp();try{fileinputstream xfile =new fileinputstream('input.txt');inputstream ylnpipe = pipeapp.changetoy(xfileln);inputstream zlnpipe=pipeapp.changetoz(ylnpipe);system.out.println();system.out.println('here are the results');system.out.pringln();datainputstream inputstream = nes datainputstream(zlnpipe);string str = inputstream.readline();while (str!=null){system.out.println(str);str=inputstream.readline();}inputstream.close();}catch(exception e){system.out.println(e.tostring());}}public inputstream changetoy(inputstream inputstream){try{datainputstream pipeout = new datainputsteam(inputstream);pipedoutstream pipeout = new pipedoutputstream();pipedlnsteam pipeln = new pipedlnputstream(pipeout);printstream printstream = new printstream(pipeout);ythread ythread = new ythread(xfileln,printstream);ythread.start();return pipeln;}catch(exeption e){system.out.println(x.tostring());}return null;}public inputstream changetoz(inputstream inputsteam){try{datainputstream yfileln = new datainputstream(inputstream);pipeoutputstream pipeln2 = new pipedinputstream(pipeout2);printrstream printstream2 = new printsteam(pipeout2);zthread zthread = new zthread(yfileln,printstream2);zthread.start();return pipeln2;}catch(exception e){system.out.println(e.tostring());}return null;}} Ythread類和Zthread類由于ythread類與zthread類基本一樣,在此僅以ythread為例加以說明。Ythread的構造器接收兩個參數:輸入的文件和第一個管道的輸出端,構造器存儲這兩個參數作為類的數據成員: Ythread(datainputstream xfileln,pringstream printstream){this.xfileln = xfileln;this.printstream = printstream;} 線程通過run()方法來處理數據。首先讀取一行數據,確保xstring不為空的情況下循環執行:string xstring = xfileln.readline();每讀一行數據,完成一次轉換string ystring = xstring.replace('x','y');然后將修改后的數據輸出到管道的輸出端:prinstream.prinrln(ystring);為了確保所有緩沖區的數據完全進入管道的輸出端:pringstram.flush();循環完成后,線程關閉管道輸出流:pringstram.close();ythread類的源程序如下: ////ythread.Java//import Java.io.*;class ythread exteads thread{datainputstream xfileln;pringstream printstream;ythread(datainputstream xfileln,pringstream.printstream){this.xfileln = xfileln;this.printstream = printstream;}public void run(){try{string xstring = xfileln.readline();while(xstring!=null){string ystring= xstring.replace('x','y');printstream.pringln(ystring);printstream.flush();xstring= xfileln.readline();}printstream.close();}catch{ioexception e}{system.out.println(e.tostring());}}} 出處 jianada··emook Java, java, J2SE, j2se, J2EE, j2ee, J2ME, j2me, ejb, ejb3, JBOSS, jboss, spring, hibernate, jdo, struts, webwork, ajax, AJAX, mysql, MySQL, Oracle, Weblogic, Websphere, scjp, scjd
標簽: Java
相關文章:
主站蜘蛛池模板: 杭州高温泵_热水泵_高温油泵|昆山奥兰克泵业制造有限公司 | 郑州大巴车出租|中巴车租赁|旅游大巴租车|包车|郑州旅游大巴车租赁有限公司 | 骨密度检测仪_骨密度分析仪_骨密度仪_动脉硬化检测仪专业生产厂家【品源医疗】 | 陶瓷砂磨机,盘式砂磨机,棒销式砂磨机-无锡市少宏粉体科技有限公司 | 昆山新莱洁净应用材料股份有限公司-卫生级蝶阀,无菌取样阀,不锈钢隔膜阀,换向阀,离心泵 | 合肥抖音SEO网站优化-网站建设-网络推广营销公司-百度爱采购-安徽企匠科技 | 塑料撕碎机_编织袋撕碎机_废纸撕碎机_生活垃圾撕碎机_废铁破碎机_河南鑫世昌机械制造有限公司 | 宠物店加盟_宠物连锁店_开宠物店-【派多格宠物】 | 爆炸冲击传感器-无线遥测传感器-航天星百科 | 聚氨酯催化剂K15,延迟催化剂SA-1,叔胺延迟催化剂,DBU,二甲基哌嗪,催化剂TMR-2,-聚氨酯催化剂生产厂家 | 四川成都干燥设备_回转筒干燥机_脉冲除尘器_输送设备_热风炉_成都川工星科机电设备有限公司 | PVC快速门-硬质快速门-洁净室快速门品牌厂家-苏州西朗门业 | Type-c防水母座|贴片母座|耳机接口|Type-c插座-深圳市步步精科技有限公司 | 合肥办公室装修 - 合肥工装公司 - 天思装饰 | 中医中药治疗血小板减少-石家庄血液病肿瘤门诊部 | 威实软件_软件定制开发_OA_OA办公系统_OA系统_办公自动化软件 | 中药超微粉碎机(中药细胞级微粉碎)-百科 | 全自动包衣机-无菌分装隔离器-浙江迦南科技股份有限公司 | 喷播机厂家_二手喷播机租赁_水泥浆洒布机-河南青山绿水机电设备有限公司 | 工业电炉,台车式电炉_厂家-淄博申华工业电炉有限公司 | 鹤壁创新仪器公司-全自动量热仪,定硫仪,煤炭测硫仪,灰熔点测定仪,快速自动测氢仪,工业分析仪,煤质化验仪器 | 多米诺-多米诺世界纪录团队-多米诺世界-多米诺团队培训-多米诺公关活动-多米诺创意广告-多米诺大型表演-多米诺专业赛事 | 大流量卧式砂磨机_强力分散机_双行星双动力混合机_同心双轴搅拌机-莱州市龙跃化工机械有限公司 | 硬质合金模具_硬质合金非标定制_硬面加工「生产厂家」-西迪技术股份有限公司 | 考勤系统_考勤管理系统_网络考勤软件_政企|集团|工厂复杂考勤工时统计排班管理系统_天时考勤 | app开发|app开发公司|小程序开发|物联网开发||北京网站制作|--前潮网络 | 玻纤土工格栅_钢塑格栅_PP焊接_单双向塑料土工格栅_复合防裂布厂家_山东大庚工程材料科技有限公司 | 定制奶茶纸杯_定制豆浆杯_广东纸杯厂_[绿保佳]一家专业生产纸杯碗的厂家 | 小青瓦丨古建筑瓦丨青瓦厂家-宜兴市徽派古典建筑材料有限公司 | 蜘蛛车-高空作业平台-升降机-高空作业车租赁-臂式伸缩臂叉装车-登高车出租厂家 - 普雷斯特机械设备(北京)有限公司 | 大鼠骨髓内皮祖细胞-小鼠神经元-无锡欣润生物科技有限公司 | 粉末冶金注射成型厂家|MIM厂家|粉末冶金齿轮|MIM零件-深圳市新泰兴精密科技 | 净化车间_洁净厂房_净化公司_净化厂房_无尘室工程_洁净工程装修|改造|施工-深圳净化公司 | 青岛侦探_青岛侦探事务所_青岛劝退小三_青岛婚外情取证-青岛王军侦探事务所 | 薄壁轴承-等截面薄壁轴承生产厂家-洛阳薄壁精密轴承有限公司 | 铝合金电阻-无源谐波滤波器-上海稳达电讯设备厂 | 无尘烘箱_洁净烤箱_真空无氧烤箱_半导体烤箱_电子防潮柜-深圳市怡和兴机电 | 长城人品牌官网| 科威信洗净科技,碳氢清洗机,超声波清洗机,真空碳氢清洗机 | 定制液氮罐_小型气相液氮罐_自增压液氮罐_班德液氮罐厂家 | 网络推广公司_网络营销方案策划_企业网络推广外包平台-上海澜推网络 |