请看这段代码:public class TT implements Runnable{
int b = 100;
public synchronized void m1(){
b = 1000;
try{
Thread.sleep(5000);
}catch(InterruptedException e ){};

System.out.println("b = " + b);
}
public synchronized void m2() throws Exception {
Thread.sleep(2500);
b = 2000;

System.out.println("b1="+b);
}
public void run(){
try{
m1();
}catch(Exception e){
e.printStackTrace();
}
}
public static void main(String[] args) throws Exception {
TT tt = new TT();
TT tt1 = new TT();
Thread t1 = new Thread(tt);

t1.start();
tt.m2();
System.out.println(tt.b);
}
}
为什么是m2方法先得到锁而不是m1,还有具体线程的执行过程。请高手帮下忙,我不胜感激。

解决方案 »

  1.   

    m1 Thread.sleep(5000); 
    m2 Thread.sleep(2500); 都是按顺序 执行的,m2 sleep时间短,所以先醒过来,先获得锁
      

  2.   

    t1.start();
    t1启动执行m1()方法,Thread.sleep(5000); t1睡眠5秒执行tt.m2() ,线程睡眠2.5秒,2.5秒后给b赋值2000
    执行System.out.println("b1="+b); 退出m2()后执行 System.out.println(tt.b); t1醒来 继续执行 System.out.println("b = " + b); 
      

  3.   

    t1.start(); 要进行线程的配置,需要一点时间,这时候会执行tt.m2();
    如果你让tt.m2();的执行睡眠的话,就会看到m1方法会先获得锁
      

  4.   


    你的意思是不是t1开始执行run需要点时间,但此时没有执行m1()?我是菜鸟,对这块比较迷糊。