public class TestErr {
public synchronized void method1() {
System.out.println("method1-----");
method2();
}
public synchronized void method2() {
System.err.println("method2-----");
method3();
}
public synchronized void method3() {
System.out.println("method3-----");
}
public static void main(String[] args) {
TestErr testErr = new TestErr();
for(int i = 0;i < 10;i++) {
new Thread(new Runnable() {
@Override
public void run()
{
testErr.method1();
}
}).start();
}
}
}
以上代码开始以为会按照method1 method2 method3顺序一组一组地输出,实际控制台信息确如下图
这里涉及到JVM指令重排的问题,如果需要调试多线程问题,还是尽量避免使用System.err.println吧