【发布时间】:2014-03-27 11:23:00
【问题描述】:
我想使用管道在线程之间实现非常简单的通信。
public class Main {
public static void main(String[] args) throws InterruptedException, IOException {
PipedReader reader = new PipedReader();
PipedWriter writer = new PipedWriter(reader);
CommitThread t1 = new CommitThread(reader);
t1.start();
for(int i = 0; i<10000; i++){
System.out.println("Main - Writing to pipe " + i);
writer.write("Number " + i);
writer.flush();
Thread.sleep(1000);
}
}
}
public class CommitThread extends Thread{
private PipedReader input;
public CommitThread(PipedReader input) {
this.input = input;
}
@Override
public void run() {
while(true){
try {
BufferedReader buffer = new BufferedReader(this.input);
while(true) {
String temp = buffer.readLine();
if(temp == null){
System.out.println("Commit - Empty");
this.input.close();
return;
}
System.out.println("Commit - Input from pipe is " + temp);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
我调试了程序,但 CommitThread 似乎没有从管道中获取消息。调试器显示管道已填满,但 CommitThread 没有读取数据并一直在等待。
我认为这一定是我犯的一个非常小而愚蠢的错误,但我找不到它。有人可以帮帮我吗?
【问题讨论】:
-
“继续等待”是什么意思?
-
readLine() 没有返回,因此从未调用过 if 语句。
标签: java multithreading