请求各位大神解答
public class TT implements Runnable{
int b = 100;
public synchronized void m1() throws Exception {
b = 1000;
Thread.sleep(5000);
System.out.println("------m1---b="+ b);
}
public synchronized void m2() throws Exception{
Thread.sleep(2500);
b = 2000;
//System.out.println("m2----"+b);
}
public void run() {
try {
m1();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) throws Exception {
TT tt = new TT();
Thread t = new Thread(tt);
t.start();
tt.m2();
System.out.println(tt.b+"***");
}
}
结果:
1000***
------m1---b=1000
我不清楚这段程序的执行顺序,老师讲的是先执行main线程,然后执行t.start(),也就是调用m1(),但这并没有调用m1()里面的方法,接着执行tt.m2(),执行里面的方法,b=2000之后,调用m1(),中的方法,b=1000,睡眠5秒,输出tt.b+"***"然后再输出System.out.println("------m1---b="+ b);
脑袋都大了......
另外 把m2()中的 //System.out.println("m2----"+b);注解取消结果又不一样
m2----2000
2000***
------m1---b=1000
为什么每次都是m2()先执行呢