今天在linux下面做开发的时候遇到了一个奇怪的事情,是关于输入输出的,先上代码。
public class TellMeWhy {
/**
* @author way
* @date 2012.9.4
* @param args
*/
public static void main(String[] args) {
StrAndStrBufferTest s = new StrAndStrBufferTest();
System.out.println("return value: " + s.testtry());
}
public int testtry() {
int x = 1;
try {
return x;
} finally {
++x;
System.err.println("finally printf x =" + x);
}
}
}
运行的时候就会发现一个很奇怪很奇怪的问题
按理说应该先输出finally printf x = 2,再输出return value:1
但是在实践中却是时而先输出finally那一行时而先输出return那一行,有时候甚至前面一行的换行符都被后面一行顶掉了,直接变成一行输出。
不知到是什么问题呢,明明只有一个线程啊求揭示真相,求高手!