J2SE综合:在Java程序中截获控制台输出 (2)

发表于:2008-05-08来源:作者:点击数: 标签:javaJAVAJava程序控制台
关键字: Java 程序中截获控制台输出1.3注意事项三 如果一个写操作在PipedOutputStream上执行,同时最近从对应PipedInputStream读取的线程已经不再活动(通过Thread.isAlive()检测),则写操作将抛出一个IOException异常。假定有两个线程w和r,w向PipedOutput
关键字:Java程序中截获控制台输出1.3 注意事项三
如果一个写操作在PipedOutputStream上执行,同时最近从对应PipedInputStream读取的线程已经不再活动(通过 Thread.isAlive()检测),则写操作将抛出一个IOException异常。假定有两个线程w和r,w向 PipedOutputStream写入数据,而r则从对应的PipedInputStream读取。下面一系列的事件将导致w线程在试图写入 PipedOutputStream时遇到IOException异常:

   1. 写操作线程w已经创建,但r线程还不存在。
   2. w向PipedOutputStream写入数据。
   3. 读线程r被创建,并从PipedInputStream读取数据。
   4. r线程结束。
   5. w企图向PipedOutputStream写入数据,发现r已经结束,抛出IOException异常。

实际上,这个问题不象第二个问题那样棘手。和多个读线程/单个写线程的情况相比,也许在应用中有一个读线程(作为响应请求的服务器)和多个写线程(发出请求)的情况更为常见。

原文转自:http://www.ltesting.net