Think in Java中关于线程的一道习题不会做。

Fortress 2004-08-23 05:04:32
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是作者的类,作用就是使程序在一定时间后结束。
}
} ///:~

但结果什么输出也没有,这是为何?多谢帮助!
...全文
149 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Fortress 2004-08-24
  • 打赏
  • 举报
回复
果然如此,多谢!
lsq2008 2004-08-24
  • 打赏
  • 举报
回复
没有加换行符,把全部都作为一行来读取了,试试下面改后代码!!
//: 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("PipedIO.java"));
public Sender() throws IOException{
super();
}
public PipedWriter getPipedWriter() { return out; }
public void run() {
while(true) {
try{
out.write(in.readLine()+"\n");
out.flush();
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:
//String str = in.readLine();
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();

}
} ///:~
Fortress 2004-08-24
  • 打赏
  • 举报
回复
我在out.write后面加入了out.flush,可还是老样子啊?
shangqiao 2004-08-23
  • 打赏
  • 举报
回复
管道是连接起来了,没有数据,看是不是没有刷新缓存呀,试试

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧