猿问

这个线程是怎么执行的?

package thread;

public class TT2 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(7000);
    b = 2000;
}

public void run() {
    try {
        m1();
    }catch(Exception e) {
        e.printStackTrace();
    }
}

public static void main(String[] args)throws Exception{
    TT2 tt = new TT2();
    Thread t = new Thread(tt);
    t.start();
    tt.m2();
    System.out.println(tt.b);
}

}

打印的结果是: 1000   b=1000
我不明白这个结果是怎么来的,为什么不是先执行m1的锁呢


千万里不及你
浏览 363回答 3
3回答

FFIVE

代码执行顺序是 m2 -》打印tt.b -》m1 -》打印b=?,其中打印tt.b时同时在很短时间给b赋值2000和1000,所有第一次打印可能会是1000或2000第二次肯定是b=1000
随时随地看视频慕课网APP

相关分类

Java
我要回答