在java中同时将数据写入控制台printinf信息

Aní*_*ñoz 5 java console multithreading println java.util.scanner

我想知道如何控制控制台打印格式.我的问题是我有2个线程,其中一个不断地向控制台输出信息,另一个不断要求用户写信息,但在写入时如果另一个线程打印出来的东西,它会切断用户正在写的短语并分割它.你怎么控制它?

我的线程代码1:

//Definition of variables

while (exit == false) {
    scanner = new Scanner(System.in);
    message = scanner.nextLine();
}

//Code to use user input
Run Code Online (Sandbox Code Playgroud)

我的帖子代码2:

//Definition of variables

while (receive.getExecutingState()) {  
    srvMsg = receive.Receive();
    System.out.println(srvMsg);
}
Run Code Online (Sandbox Code Playgroud)

控制台输出:

No more data to show.
No more data to show.
hNo more data to show.
eNo more data to show.
llo
Run Code Online (Sandbox Code Playgroud)

我希望它在用户写入数据时保持打印消息,但不要分割它正在编写的内容.

提前致谢!

编辑:正如@Thomas所说,我想以更清晰的方式,是保持用户在控制台底部写的文本,其余的都在更新.

ass*_*ias 1

一种方法是一一读取用户的字符:

  • 让写入线程写入
  • 如果用户输入一个字符(或多个),则暂停写入线程,直到用户按 Enter 键
  • 当用户按下回车键时,恢复写入线程

暂停/恢复机制可以通过多种方式完成,例如通过使用Sempahore由读取线程或写入线程轮流获取的一次许可。