J2SE綜合:在Java程序中截獲控制臺輸出 (2)
關鍵字: 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.anti-gravitydesign.com