最近,我正在尝试实现一个基于控制台的聊天应用程序,我需要能够在同时输出的地方输入输入。下面是一个示例演示程序:
public static class ParIn implements Runnable {
@Override
public void run() {
int i;
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
for (i = 0; i < 5; i++) {
String ln = "";
try {
ln = in.readLine();
} catch (IOException e) {
e.printStackTrace();
}
System.out.printf("Your input is (%s)\n", ln);
}
}
}
public static class ParOut implements Runnable {
@Override
public void run() {
int i;
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
for (i = 0; i < 5000; i++) {
System.err.println("Hello this is sample");
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public static void main(String[] args) {
ExecutorService executorService = Executors.newFixedThreadPool(3);
executorService.submit(new ParIn());
executorService.submit(new ParOut());
executorService.shutdown();
}
此解决方案的主要问题是当有一个System.out时,它会清除所有已输入的数据。例如:
什么可能是解决问题的理想方案?特别是,请记住,我无法停止并行输出,因此在这两个线程之间进行同步似乎不是我的解决方案。
已经尝试过的想法:
解决这个问题的一个主要想法是拥有与C&#39的getchar()相当的东西,并且牺牲了返回空间并在控制台中反映出来的能力,但是,与\r
相结合的可能是用于输出并继续输入。