首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 | C/C++ | 嵌入式开发 | 存储世界 | 服务器
网络设备 | IDC | 安全 | 求职招聘 | 数字网校 | 网页设计 | 平面设计 | 技术专题 | 电子书下载 | 教学视频 | 源码下载 | 搜索 | 博客 | 论坛
中国IT实验室Linux频道
中国IT教育
Google
首页 资讯动态 认证考试 新手入门 核心技术 高级技术 J2EE J2ME Java&XML 开源技术 其他技术 RSS订阅 论坛 专题
您现在的位置: 中国IT实验室 >> Java >> 高级技术 >> 设计模式 >> 正文

JAVA平台进程间协作应用集锦

  摘要:本文介绍了在JAVA平台通过多个进程间的“无缝协作”来实现借助已有进程来帮助开发人员来完成特定任务的一些经典实践。巧妙地使用外部进程,不仅可以极大减少系统的开发成本,也可以提高系统的稳定性和执行效率。
 
  一、引言
 
  无论对于哪个平台,进程间的协作都是亮点之一。通过进程间的协作我们可以总合成熟,公共的执行文件来实现自己一些特定的功能(例如:通过数据库工具来实现数据库操作,通过编译工具来实现动态代码的编译等)。所以,无论是在Windows平台还是Unix平台,都提供了进程间协作的机制。例如:Unix和Windows平台下的批处理技术,管道技术等,都是通过利用一些外部进程来实现本进程无法实现的内容。
 
  作为JAVA平台,对进程间协作的支持更加简单。JAVA定义了专门的进程I/O流,通过这些进程I/O流,我们就实现进程间的“无缝协作”。
 
  所谓无缝,是指进程之间并不是简单的调用关系,而是表现为多个进程的合为一体。就像Unix和Windows平台中创建子进程,父进程通过向子进程传递信息来驱动子进程完成任务,子进程执行完毕之后,还会将执行结果反馈给父进程。整个过程似乎只执行一个进程而已。相比之下,JAVA平台实现进程间的无缝连接要比上述的Unix或Windows平台要简单得多。
 
  二、进程间协作的实现过程
 
  (1)通过Runtime类的静态方法getRuntime来获取Runtime对象
 
  (2)通过Runtime类的exec方法来执行可执行文件命令行(可带参数)并获取子进程对象Process pJavac = Runtime.getRuntime()。exec(command);
 
  (3)将子进程对象的错误流或者输出流作为输入流,并对其进行读取
 
InputStreamReader isr_error = new InputStreamReader(pJavac.getErrorStream() ); InputStreamReader isr_normal = new InputStreamReader(pJavac.getInputStream() ); //Get the error output from javac while( (ch = isr_error.read() ) != -1) { strbuf_error.append((char)ch); }

  (4)等待子进程执行完毕(通过Process类的waitFor方法),即可对子进程输出流进行分析
 
//Wait for javac process finish pJavac.waitFor();


  注意:步骤(4)是必须的,否则读取到的输出可能会不完整。这一点在很多例子中没有讲到。
 
  读者不难看出,与函数,线程调用不同的是,进程间的创建是重量级的,一般都需要开辟单独的进程空间。对于开发人员而言,很多工具都难使用其内部的函数资源的,即使可以通过动态链接库进行函数载入,但是该过程往往也是相当麻烦。

[1] [2] 下一页

【责编:Zenghui】

中国IT教育

相关产品和培训
文章评论
 友情推荐链接
 认证培训
 专题推荐

 ·关于Java框架技术专题
 ·XML全攻略技术专题
 ·JAVA开源技术介绍专题
 ·Java嵌入式开发之J2ME技术专题
 ·超前体验 Oracle 11g的5个新特性…
 ·揭密使用VB.NET的五个实用技巧
 ·Oracle和SQL Server常用函数对比专题…
 ·展现C#世界 C#程序设计专题…
 ·Java入门 Tomcat的配置技巧精华专题…
 ·Oracle RMAN物理备份技术详解…
 今日更新
 社区讨论
 博客论点
 频道精选
 Java 频道导航