请问关于java 的运行结果输出的问题

来源:百度知道 编辑:UC知道 时间:2024/06/13 06:46:41
public class TestSyn implements Runnable {
int b = 100;
public synchronized void m1 () {
b =1000;
try {
Thread.sleep (10);
} catch (InterruptedException e) {
e.printStackTrace ();
}
System.out.println (" 1b = "+b);
}
public synchronized void m2 () {
try {
Thread.sleep (100);
} catch (InterruptedException e) {
e.printStackTrace ();
}
b =2000;
//System.out.println (" 2b = "+b);
}
public void run () {
m1();
}
public static void main (String []args) {
TestSyn tt = new TestSyn ();
Thread t = new Thread (tt);
t.start ();
tt.m2();
System.out.println (" 3b = "+tt.b);
}
}
结果为什么是 3b 1000( 这儿为什么不是 3b 2000)
1b 1000
请把这个执行这程说一下啊, 若把上面的 // 去掉后,结果就是
2b 2000
3b 2000
1b 1000
这上面的两个‘3b’为什么 不一样啊 答案一定要写一下这代码的执行过程啊。谢谢

// 去掉后也不是你的结果还是
2b = 2000
3b = 1000
1b = 1000
我给你说一下原因啊
这里面有两个线程,一个是t线程,一个是main线程,t.start ();
之前没有问题,当你执行到t.start ();
之后就开始了新的线程t,由于一些初始换原因,t线程进入run函数调用m1可能要不只一条语句,而main线程进入tt.m2();要快一些,而 m2函数和m1都是synchronized,m2和m1不能同时运行,直到m2完成后才能执行m1,现在m2刚刚完毕,b的值为2000,m2执行的同时m1已经在等待,main线程也准备执行,那要看那个快了,所以我的结果和你的结果不一样啊