微科社区,轻松开发从此开始! 请登陆 免费注册

微科社区

当前位置:首页 > Java平台 > J2SE >

新人求助关于线程同步问题。

时间:2014-04-04 13:45  浏览:努力统计中...
publicclassTTimplementsRunnable{ intb=100; publicsynchronizedvoidm1()throwsException{ //Thread.sleep(2000); b=1000; Thread.sleep(5000); System.out.println( b= +b); } publicsynchronizedvoidm2()throwsException{ Thread.sleep(2500); b=2000; } pu
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先运行,不确定.



谢谢!我也是这样想的!
    顶一下
    (0)
    0%
    踩一下
    (0)
    0%
    ------分隔线------