Java线程加入后卡住

标签 java multithreading concurrency java-threads

我有一个 Transmitter 类,其中包含一个 BufferedReader 和一个 PrintWriter。这个想法是,在主类上,使用 Transmitter.receive() 和 Transmitter.transmit() 到主套接字。问题是:

 public void receive() throws Exception {
      // Reads from the socket
      Thread listener = new Thread(new Runnable() {
        public void run() {
          String res;

          try {
            while((res = input.readLine()) != null) {
              System.out.println("message received: " + res);

              outputMessage = (res);

            if (res.equals("\n")) {
              break;
            }
           }
        } catch (IOException e) {
          e.printStackTrace();
        }
      };
    });

    listener.start();
    listener.join();
  }

线程更改了“outputMessage”值,我可以使用辅助方法获取该值。问题是,如果没有 join,我的客户端会获取 outputMessage,但我想在我的主类上多次使用它,如下所示:

trans1.receive();
while(trans1.getOutput() == null);
System.out.println("message: " + trans1.getOutput());

但是使用 join 这个 system.out 永远不会执行,因为 trans1.receive() 卡住了......有什么想法吗?

编辑1:这里是发射器类https://titanpad.com/puYBvlVery

最佳答案

您可以发送\n;这并不意味着您会在 Java 代码中看到它。

正如 Javadoc for BufferedReader.readLine() 中所述(强调我的):

(Returns) A String containing the contents of the line, not including any line-termination characters

因此“\n”将永远不会被返回。

关于Java线程加入后卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37264319/

相关文章:

java - 如何让 JUnit4 记录所有未抛出的异常?

java - 当使用并行流时,归约行为很奇怪,但对于 Java 8u5 中的顺序流却工作得很好

c - Pthread condvar 习语

java - 在事件调度线程中显示 JWindow

java - 在java中插入换行符

java - 我如何知道Java类的注释?

java - 将字母(char)索引翻译为整数索引 POI Java

java - 线程化java服务器只发送一个文件

c - 是否可以使用 libusb 创建到同一 USB 设备的多个连接实例?

.net - 这似乎是并发集合/队列组合的合理方法吗?