运行循环时输出奇怪

ima*_*_tn 3 java multithreading java-io system.out

任何人都可以告诉我为什么在运行这个循环后我总是有这个奇怪的输出?这是一个线程问题还是什么?

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

- >输出:

    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
Run Code Online (Sandbox Code Playgroud)

MK.*_*MK. 11

您的终端正在运行您的应用程序并且有两个连接到它的文件描述符,一个用于stdout,另一个用于stderr.然后,它必须读取您的应用程序在这些文件描述符上输出的数据并在屏幕上呈现它.无法保证终端应用程序(或操作系统)如何实现此交互.想象一下,终端实际上​​有两个并行读取stdout和stderr的线程.这两个线程从fds获取数据并进入屏幕的顺序不保证在应用程序输出时是顺序的.