java - Java 中命名管道的并发读/写(在 Windows 上)

标签 java multithreading deadlock named-pipes

我正在尝试使用命名管道在 Windows 上使用 v01ver 描述的方法在 Windows 上提供 C# 应用程序和 Java 应用程序之间的通信:How to open a Windows named pipe from Java?

我在 Java 端遇到了一个问题,因为我有一个读取器线程一直在等待管道上的输入,当我尝试从我的主线程写入管道时,它会永远卡住。

final RandomAccessFile pipe;
try {
   pipe = new RandomAccessFile("\\\\.\\pipe\\mypipe", "rw");
}
catch (FileNotFoundException ex) {
   ex.printStackTrace();
   return;
}

Thread readerThread = new Thread(new Runnable() {
   @Override
   public void run() {
      String line = null;
      try {
         while (null != (line = pipe.readLine())) {
            System.out.println(line);
         }
      }
      catch (IOException ex) {
         ex.printStackTrace();
      }
   }
});
readerThread.start();

try { Thread.sleep(500); } catch (InterruptedException e) {}

try {
   System.out.println("Writing a message...");
   pipe.write("Hello there.\n".getBytes());
   System.out.println("Finished.");
}
catch (IOException ex) {
   ex.printStackTrace();
}

输出是:

Writing a message...
然后它永远等待。

如何在另一个线程中等待输入时写入命名管道?

最佳答案

这是管道的预期行为。它应该挂起,直到其他进程连接到管道并读取它。

关于java - Java 中命名管道的并发读/写(在 Windows 上),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4974989/

相关文章:

Java,补充迭代器或队列

java - 配置上下文特定的 Tomcat 安全领域

c++ - 为记录器创建一个单独的线程可以吗?

java - LinkedBlockingQueue挂起的InputStream的自定义实现

ruby - 如何使用 rspec 测试多线程 TCPServer

java - java中允许特定数量的用户访问某个方法

java - 如何检查 JsonElement 中的项目是否存在于单独的 JsonArray 中?

java - 使用 Platform.runLater 禁用折叠 JavaFX 中的 Accordion

当 Hibernate 应用程序加载数据以供只读使用时 Oracle 死锁

mysql - 在 Yii console.log 中记录更少的条目