【问题标题】:Simple Java Pipe communication does not work简单的 Java 管道通信不起作用
【发布时间】: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


【解决方案1】:

看这里:BufferedReader doesn't return

如果您要连接的服务器没有关闭连接,BufferedReader 将挂起,等待下一行文本。

所以我认为这是问题所在。只需尝试逐字符读取字符

【讨论】:

  • 这是否与我使用的 main 版本不同?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多