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

有没有碰到过这种情况,这是什么意思

有没有碰到过这种情况,这是什么意思

迷失代码林 2018-11-11 21:55:43
创建3个线程run一个method方法,第一个线程启动间隔10ms启动第二个线程再隔200ms启动第三个线程。并没有对线程2作出超过线程3的限制,但是每次都是线程3先执行,这是什么意思?后面试了下2000ms执行的顺序才和代码顺序一样。下面附上代码,请各位看官指教!public class ChangeLock { private String lock = "lock"; private void method(){ synchronized (lock) { try { System.out.println("当前线程 : "  + Thread.currentThread().getName() + "开始"); if(Thread.currentThread().getName().equals("t1"))lock = "1"; Thread.sleep(2000); System.out.println("当前线程 : "  + Thread.currentThread().getName() + "结束"+lock+"内存地址:"+System.identityHashCode(lock)); } catch (InterruptedException e) { e.printStackTrace(); } } } public static void main(String[] args) throws InterruptedException { final ChangeLock changeLock = new ChangeLock(); Thread t1 = new Thread(()->changeLock.method(),"t1"); Thread t2 = new Thread(()->(new ChangeLock()).method(),"t2"); t1.start(); Thread.sleep(10); t2.start(); Thread.sleep(200); Thread t3=new Thread((new ChangeLock())::method,"t3"); t3.start(); } }执行结果:当前线程 : t1开始当前线程 : t1结束1内存地址:1901608479当前线程 : t3开始当前线程 : t3结束lock内存地址:460860509当前线程 : t2开始当前线程 : t2结束lock内存地址:460860509没做更多的测试,想想200ms的时间够cpu来说已经很长了,为什么t3总能在t2线程之前执行???
查看完整描述
  • 2 回答
  • 0 关注
  • 1236 浏览

添加回答

举报

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