如果一个写操作在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异常。
实际上,这个问题不象第二个问题那样棘手。和多个读线程/单个写线程的情况相比,也许在应用中有一个读线程(作为响应请求的服务器)和多个写线程(发出请求)的情况更为常见。
延伸阅读
文章来源于领测软件测试网 https://www.ltesting.net/