weixin_44596740 2019-01-29 14:16 采纳率: 0%
浏览 309
已采纳

这个线程是怎么执行的?

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的锁呢
  • 写回答

3条回答 默认 最新

  • 洗洗脚泡泡澡 2019-01-29 14:52
    关注

    不知道你写这个是想实现什么或者为了测试什么,synchronized应用在方法上锁的是当前对象、t.start();当前对象执行的是M1,但是tt.m2()是
    另一个线程执行的,并且执行的是m2()方法,你可以再m2方法中打个日志试下。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 yolov8边框坐标
  • ¥15 matlab中使用gurobi时报错
  • ¥15 WPF 大屏看板表格背景图片设置
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真