Странный вывод при запуске цикла - PullRequest
3 голосов
/ 30 марта 2012

Может кто-нибудь сказать мне, почему у меня всегда есть этот странный вывод после выполнения этого цикла?Это проблема с многопоточностью или что?

  for(int i=0;i<10;i++){
     System.out.println("out: "+i);
     System.err.println("err: "+(i+1));
   }

-> ВЫХОД:

    err: 1
    out: 0
    err: 2
    err: 3
    err: 4
    out: 1
    out: 2
    out: 3
    out: 4
    err: 5
    out: 5
    err: 6
    out: 6
    err: 7
    err: 8
    out: 7

    out: 8
    err: 9
    out: 9
    err: 10
    out: 10

Ответы [ 2 ]

11 голосов
/ 30 марта 2012

Ваш терминал запускает ваше приложение и к нему подключены два файловых дескриптора, один для stdout и один для stderr.Затем он должен прочитать данные, которые ваше приложение выводит по этим файловым дескрипторам, и отобразить их на экране.Нет никакой гарантии, как терминальное приложение (или ОС в этом отношении) реализует это взаимодействие.Представьте себе, что терминал на самом деле имеет 2 потока, читающих из stdout и stderr параллельно.Порядок, в котором эти 2 потока будут получать данные из fds и на экран, не обязательно будет последовательным, когда ваше приложение выводит.

3 голосов
/ 30 марта 2012

Стандартный вывод и стандартная ошибка имеют отдельные буферы. Перемежение нормальное. Попробуйте очистить выходной поток после каждого вызова печати. ​​

...