首页 新闻 会员 周边

Java线程的疑问在注释中。求解答,附上代码。

0
悬赏园豆:30 [已解决问题] 解决于 2016-05-06 17:37

/* 文件名TT2.java
*
* 最后一条语句输出的b的值是1000还是2000?
*/

public class TT2 implements Runnable{
  int b = 0;

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

  public synchronized void m2()throws Exception{
    b = 2000;
    Thread.sleep(6000);
    //System.out.println("b_m2 = "+b);  //加上这条输出语句 结果为:b = 2000,

                                                         //不加b = 1000
  }

  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("b = "+tt.b);
  }
}

小溏的主页 小溏 | 初学一级 | 园豆:136
提问于:2015-07-14 21:01
< >
分享
最佳答案
0

1000 和 2000 都有可能,其结果依赖于 m1 和 m2 谁先获得锁。

收获园豆:20
Launcher | 高人七级 |园豆:45045 | 2015-07-15 09:26
其他回答(1)
0

synchronized方法等同于

synchronized(this){

//代码块

}

 

锁在对象实例上,你的这个例子要看到底如何执行可以吧 两个sleep的值设的相差大点,就可以看到效果

收获园豆:10
叶一知秋 | 园豆:283 (菜鸟二级) | 2015-07-15 12:03
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册