为了账号安全,请及时绑定邮箱和手机立即绑定

这个线程是怎么执行的?

这个线程是怎么执行的?

千万里不及你 2019-04-18 15:15:54
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 回答

?
FFIVE

TA贡献1797条经验 获得超6个赞

代码执行顺序是 m2 -》打印tt.b -》m1 -》打印b=?,其中打印tt.b时同时在很短时间给b赋值2000和1000,所有第一次打印可能会是1000或2000第二次肯定是b=1000


查看完整回答
反对 回复 2019-05-16
  • 3 回答
  • 0 关注
  • 362 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信