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]
这个程序在不同的JVM上有不同的答案.
t.start();
//------------------
tt.m2();
这两句代码分别代表两个执行线程,
因为m1和m2里面都分别让CPU有指定的时间片停顿,
即如果t.start()先执行m1,则结果为: 2000 1000
反之,则结果是1000 1000