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

线程竞争资源时候有没有先后顺序

线程竞争资源时候有没有先后顺序

汪汪一只猫 2019-01-18 00:13:46
假设线程1执行了wait(),线程2获取到了锁资源,与此同时线程3启动执行synchronized竞争锁资源,线程2在结束之前使用了notifyAll()唤醒线程1,那么线程1和线程3谁能获取到锁是随机的吗?在我的理解中,是随机的,但是现在的实际情况是线程1会获取到资源请问是我理解错了吗,请说明一下。 还有就是线程1执行了wait之后,线程4先获取到锁资源,但是也执行了wait,然后按照上面的继续进行下去的,在线程2结束的时候,为什么会执行线程1和线程4。 public class ThreadTest { public static void main(String[] args) { Object co = new Object(); System.out.println(co); for (int i = 0; i < 10; i++) { MyThread t = new MyThread("Thread" + i, co); t.start(); } try { TimeUnit.SECONDS.sleep(2); System.out.println("-----Main Thread notify-----"); synchronized (co) { co.notify(); } TimeUnit.SECONDS.sleep(2); System.out.println("Main Thread is end."); } catch (InterruptedException e) { e.printStackTrace(); } } static class MyThread extends Thread { private String name; private Object co; public MyThread(String name, Object o) { this.name = name; this.co = o; } @Override public void run() { System.out.println(name + " is waiting."); try { synchronized (co) { co.wait(); } System.out.println(name + " has been notified."); } catch (InterruptedException e) { e.printStackTrace(); } } } } 比如说这个代码,先不管他会造成死锁,问题是main中那个notify释放的,一定会是第一个执行wait的,难道不是随机的吗??
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 391 浏览

添加回答

举报

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