myqdkl 2015-03-01 03:19 采纳率: 0%
浏览 1546

问java中关于线程同步的问题

public class TT implements Runnable {
int b = 100;

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

public synchronized void m2() throws Exception {
    Thread.sleep(5000);
    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);
}

}

最后打印的结果是
b =1000
1000

请问这个程序的执行顺序是怎么样的
m1() m2()这两个方法都被synchronized修饰是他们是怎么执行的

  • 写回答

5条回答

  • danielinbiti 2015-03-01 04:07
    关注

    m1,m2执行顺序是不确定的。没有顺序可言,关键是thread.sleep后,谁先被唤醒。
    这程序只能说先唤醒执行m1的概率高,所以打印出tt.b是1000,实际上几种组合都有可能。

    System.out.println("b = " + b);打印出b=2000都可能。
    
    评论

报告相同问题?