简单的问题,但我没有多线程经验。 如果两个线程使用相同的 synchronized 方法(在Java中)并且第一个线程在给定时间无法访问该方法(因为第二个线程正在使用它),第一个线程是否会等待某些线程(冻结)时间,然后尝试再次访问它,或者它只是放弃而根本不访问它?
答案 0 :(得分:3)
根据doc
,第一种方法会阻塞并等待它可以使用该方法当一个线程正在为一个对象执行一个synchronized方法时,所有其他线程都会调用同一个对象的同步方法阻塞(暂停执行),直到第一个线程完成该对象为止。
我不能100%确定我是否记得正确,但如果内存对我有用,那么JVM并不能保证线程能够获得锁定后的顺序。已被释放。
答案 1 :(得分:0)
答案 2 :(得分:0)
等待。
JVM不允许两个线程同时在同一个对象上同步。如果一个线程在第二个线程尝试时已经同步,那么第二个线程将进入休眠状态并添加到队列中。
每当线程释放一个锁(即,当它从同步方法或块退出时),该锁的队列头部的线程将被唤醒,然后它将被允许锁定锁。