并行控制台I / O是Java,其中一个线程仅执行输出,一个线程仅执行输入

时间:2017-12-31 15:38:45

标签: java multithreading io java-io

最近,我正在尝试实现一个基于控制台的聊天应用程序,我需要能够在同时输出的地方输入输入。下面是一个示例演示程序:

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时,它会清除所有已输入的数据。例如:

Sample console

什么可能是解决问题的理想方案?特别是,请记住,我无法停止并行输出,因此在这两个线程之间进行同步似乎不是我的解决方案。

已经尝试过的想法:

解决这个问题的一个主要想法是拥有与C&#39的getchar()相当的东西,并且牺牲了返回空间并在控制台中反映出来的能力,但是,与\r相结合的可能是用于输出并继续输入。

0 个答案:

没有答案