客户端线程神秘地漏掉了java代码,因此没有回答

6fe3ivhb  于 2021-06-30  发布在  Java
关注(0)|答案(0)|浏览(198)

执行每一行代码->事件->跳过重要的java代码行

客户端服务器#assumenocodeoptimization#ide:processing(麻省理工学院processing.org)

有一个线程“connectionhandler”停留在它发送或接收数据的循环中。在它接收第一个数据之前,每一行代码都会被执行。之后,程序似乎在system.out.println()处暂停!?然后,当更多的数据到达时,会再次执行某些行java代码,但会跳过与之完全相同的system.out.println()——此外,我前面提到的其他内容。
真正的问题是跳过了sendoutput()方法。这才是真正磨我的齿轮。请帮忙。
我正在麻省理工学院开发的一个名为“处理”的环境中编程。据我所知,它只会在代码周围 Package 更多的java代码。
在下面的代码片段中,我将解释为什么我认为jit或aot的代码优化不是问题所在(最后我猜我错了)。我希望相反,因为你不能通过系统变量来处理抑制优化)

private void runConnectionHandler() {
    final BufferedReader inFromClient = getBufferedReader(socket);
    final DataOutputStream dataOutputStream = getDataOutputStream(socket);
    while (true) {   
      getInput(inFromClient);
      sendOutput(dataOutputStream);
      System.out.println("Cycle ends");
    }
  }

  private void getInput(final BufferedReader input) {
    System.out.println("Get");
    try {
      String clientSentence = null;
      if (input.ready()) {
        while ((clientSentence = input.readLine()) != null) {
          inputQueue.add(new GameData(clientSentence));
          System.out.println("Received se: \"" + clientSentence + "\"");
          System.out.println("1");
        }
        System.out.println("2");
      }
      System.out.println("3");
    } 
    catch (final Exception e) {
      e.printStackTrace();
    }
  }

  private void sendOutput(final DataOutputStream dataOutputStream) {
    System.out.println("Send");
    while (outputQueue.peek() != null) {
      try {
        String out = outputQueue.poll().toString();
        dataOutputStream.writeBytes(out + "\r\n");
        dataOutputStream.flush();
        System.out.println("Sent \"" + out + "\"");
      } 
      catch (final Exception e) {
        e.printStackTrace();
      }
    }
  }

输出:在第一个数据之前:
不知道优化,我认为它也应该在这里生效,但它没有?

...
Get
3
Send
Cycle ends
...

输出:第一个数据到达
“1”之后输出停止。为什么是system.out.println(“2”);等等没被处决?!为什么会停下来?!?!

...
Get
3
Send
Cycle ends    
Get
Received se: "SET PLAY MODE"
1

输出:手动发送更多数据
gad dayium,我是说我的系统到哪里去了。out.println(“get”);什么都没有?!

...
Get
Received se: "SET PLAY MODE"
1
Received se: "Hey Ho1"
1

输出:服务器关闭
当我关闭另一端(服务器)时,每一行代码都会再次执行?!?!此外,它既不停止,也不抛出执行(但可能是不同的问题)。

...
Get
3
Send
Cycle ends
...

另外,如果我的观念被深深打破,我会感激很多提示。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题