日期:2014-05-20  浏览次数:20669 次

新人求助关于线程同步问题。
public class TT implements Runnable {
int b = 100;

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

当main方法执行到t.start()时,开启另一个线程,即执行run()方法,也就是m1()方法,同时main方法继续执行,也就是tt.m2()方法开始执行,那到底是m1()方法先锁定对象还是m2()方法先锁定对象?可能问题有点可笑,但是新人看视频自学java,这个问题始终想不通!请各位前辈包含!
------解决方案--------------------
到底是m1先锁定还是m2先锁定,这个是不确定的,都有可能,而且具有随机性。
------解决方案--------------------
线程状态,创建,可运行,运行,阻塞,等待,死亡.创建完线程序,调用start()方法并不会马上就运行,什么时候运行这由系统决定的,所以叫可运行状态.这里是m1先运行还是m2先运行,不确定.