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 请问有用MZmine处理 “Waters SYNAPT G2-Si QTOF质谱仪在MSE模式下采集的非靶向数据” 的分析教程吗
  • ¥50 opencv4nodejs 如何安装
  • ¥15 adb push异常 adb: error: 1409-byte write failed: Invalid argument
  • ¥15 nginx反向代理获取ip,java获取真实ip
  • ¥15 eda:门禁系统设计
  • ¥50 如何使用js去调用vscode-js-debugger的方法去调试网页
  • ¥15 376.1电表主站通信协议下发指令全被否认问题
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥15 复杂网络,变滞后传递熵,FDA
  • ¥20 csv格式数据集预处理及模型选择