Think in Java中关于线程的一道习题不会做。
Think in Java第13章,有一道关于线程的习题:
Modify PipedIO.java so that Sender reads and sends lines from a text file.
大致意思就是启动两个线程,其中一个不断读取文件,另一个不断输出。我把作者的PipedIO.java修改如下:
//: c13:PipedIO.java
// Using pipes for inter-thread I/O
// From 'Thinking in Java, 3rd ed.' (c) Bruce Eckel 2002
// www.BruceEckel.com. See copyright notice in CopyRight.txt.
import java.io.*;
import java.util.*;
class Sender extends Thread {
private Random rand = new Random();
private PipedWriter out = new PipedWriter();
private BufferedReader in = new BufferedReader(new FileReader("C:\\temp\\java_install.log"));
public Sender() throws IOException{
super();
}
public PipedWriter getPipedWriter() { return out; }
public void run() {
while(true) {
try{
out.write(in.readLine());
sleep(rand.nextInt(500));
}catch(Exception e) {
throw new RuntimeException(e);
}
}
}
}
class Receiver extends Thread {
private BufferedReader in;
public Receiver(Sender sender) throws IOException {
in = new BufferedReader(new PipedReader(sender.getPipedWriter()));
}
public void run() {
try {
while(true) {
// Blocks until characters are there:
System.out.println("Read: " + in.readLine());
}
} catch(IOException e) {
throw new RuntimeException(e);
}
}
}
public class PipedIO {
public static void main(String[] args) throws Exception {
Sender sender = new Sender();
Receiver receiver = new Receiver(sender);
sender.start();
receiver.start();
new Timeout(4000, "Terminated");//timeout是作者的类,作用就是使程序在一定时间后结束。
}
} ///:~
但结果什么输出也没有,这是为何?多谢帮助!