печать блокирует ввод BufferedReader? - PullRequest
0 голосов
/ 16 мая 2019

Я пытаюсь параллельно выполнить мой код, но теперь возникла проблема. Код без параллельного выполнения ожидает ввода (1), а затем он что-то печатает (2). Теперь я выполняю свой код параллельно с помощью таймера (task2) и для ввода (1) я получил еще один цикл.

Теперь, если я пытаюсь что-то записать, но я недостаточно быстр, вход не читает весь ввод, который был прерван задачей 2 с распечаткой.

static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
static PrintStream out = new PrintStream(System.out);

static void test1(BufferedReader in, PrintStream out) throws IOException {
    String input = in.readLine();
    if (input.equals("test"))
        System.out.println("true input");
    else System.out.println("false input");
}

public static void main(String[] args) throws IOException {
    Timer timer = new Timer();
    timer.schedule(new TimerTask() {
        @Override
        public void run() {
            while (true) {
                System.out.println("print"); 
                Thread.sleep(1000);}}}, 1000);
    while (true)
        test1(in, out);

}

https://imgur.com/iyIdWeA

1 Ответ

0 голосов
/ 18 мая 2019

Вы можете читать отдельные символы, пока не нажмете Enter.

StringBuilder strBuilder = new StringBuilder();
char ch;
while((ch = in.read()) != '\n'){
    strBuilder.append(ch);
}
String input = strBuilder.toString();
...