考虑以下执行语句:
(1) 线程 A:检查特定锁定状态并失败 (2) 线程 A:因此尝试进入等待状态 (3) 线程 B:完成特定任务并修改线程 A 所需的锁定状态 (4)线程 B:信号 notifyAll()
考虑 Java 的 VM 是否按照以下顺序 (1),(3),(4),(2) 重新排序代码以执行。我相信这种情况是可能的,在这种情况下,可能会出现问题,因为线程 A 永远进入等待状态,因为没有其他线程需要通知!
编辑1:我没有使用同步块来锁定。相反,我使用 AtomicInteger 来锁定一段代码。考虑一个 RWLock 类,它有一个原子变量 N。随着进入锁定状态的 Readers 和 Writers 的数量增加或减少。该问题适用于这种情况,而不适用于同步块/方法。