catch(IOException e) {
System.err.println("讀取pipedIS時出現錯誤: " + e);
System.exit(1);
}
} // main()
}
只要把讀/寫操作分開到不同的線程,Listing 2的問題就可以輕松地解決。Listing 3是Listing 2經過修改后的版本,它在一個單獨的線程中執行寫入PipedOutputStream的操作(和讀取線程不同的線程)。為證明一次寫入的數據可以超過 1024字節,我們讓寫操作線程每次調用PipedOutputStream的write()方法時寫入2000字節。那么,在 startWriterThread()方法中創建的線程是否會阻塞呢?按照Java運行時線程調度機制,它當然會阻塞。寫操作在阻塞之前實際上最多只能寫入1024字節的有效載荷(即PipedInputStream緩沖區的大。。但這并不會成為問題,因為主線程(main)很快就會從 PipedInputStream的循環緩沖區讀取數據,空出緩沖區空間。最終,寫操作線程會從上一次中止的地方重新開始,寫入2000字節有效載荷中的剩余部分。
【Listing 3:把讀/寫操作分開到不同的線程】
import java.io.*;
public class Listing3 {
static PipedInputStream pipedIS =
new PipedInputStream();
static PipedOutputStream pipedOS =
new PipedOutputStream();
public static void main(String[] args) {
try {
pipedIS.connect(pipedOS);
}
延伸閱讀
文章來源于領測軟件測試網 http://www.kjueaiud.com/