以异常顺序执行的同一线程上的代码

时间:2014-07-18 07:32:01

标签: java multithreading scjp

这是SCJP练习题中的一段代码:

public class Threads2 implements Runnable {

    public void run() {
        System.out.println("run.");
        throw new RuntimeException("Problem");
    }

    public static void main(String[] args) {
        Thread t = new Thread(new Threads2());
        t.start();
        System.out.println("End of method.");
    }
}

部分提到here

但是,我的问题不是先前的问题。当我在多台机器上多次运行程序时,我偶尔会在{34}运行之前得到RuntimeException。在输出中。这对我来说没有意义,因为这些代码行在同一个线程中执行,所以它应该是相反的顺序。

有人可以解释为什么会这样吗?

1 个答案:

答案 0 :(得分:1)

e.printStacktrace正在使用System.err

System.out和System.err是不同的对象。它有缓冲写入器显示到客户端窗口。

即使它会以不同的顺序执行,它也会转到不同的Buffer。

如果Err缓冲区打印第一个错误将首先出现。否则将先出现。