public class TT implements Runnable {
int b = 100;

public synchronized void m1() throws Exception{
b = 1000;
Thread.sleep(5000);
System.out.println("b = " + b);
}

public synchronized void m2() throws Exception {
Thread.sleep(2500);
b = 2000;
}

public void run() {
try {
m1();
} catch(Exception e) {
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);
}
}
[code=MSIL]
以上代码马士兵视频教程里运行的打印结果是 
1000 
b = 1000 
  
而我运行的结果却是 
2000 
b = 1000 
  
怎么回事啊,到底哪个才是正确结果啊,程序的执行顺序到底是怎么执行的? 
[/code]

解决方案 »

  1.   

    应该都是正确的吧.
    这个程序在不同的JVM上有不同的答案.
      

  2.   

    两种结果都正确,也就是说结果中两种可能都会出现
    t.start();
    //------------------        
    tt.m2();
    这两句代码分别代表两个执行线程,
    因为m1和m2里面都分别让CPU有指定的时间片停顿,
    即如果t.start()先执行m1,则结果为: 2000    1000
    反之,则结果是1000   1000
      

  3.   

    理论上先执行   t.start()方法,而后执行tt.m2();也就是结果应是 1000,b=1000