这是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
。在输出中。这对我来说没有意义,因为这些代码行在同一个线程中执行,所以它应该是相反的顺序。
有人可以解释为什么会这样吗?
答案 0 :(得分:1)
e.printStacktrace正在使用System.err
。
System.out和System.err是不同的对象。它有缓冲写入器显示到客户端窗口。
即使它会以不同的顺序执行,它也会转到不同的Buffer。
如果Err缓冲区打印第一个错误将首先出现。否则将先出现。