Java:等待同步块,谁先走?
2022-09-04 03:09:35
这个问题的灵感来自另一个问题。
如果多个线程正在等待一个块,并且锁定变得可用,那么谁先走?是否按线程优先级(然后是先到先得)?synchronized
同样的规则是否适用于(具有多个 ing 线程)?notify
wait
这个问题的灵感来自另一个问题。
如果多个线程正在等待一个块,并且锁定变得可用,那么谁先走?是否按线程优先级(然后是先到先得)?synchronized
同样的规则是否适用于(具有多个 ing 线程)?notify
wait
据这个人说:http://tutorials.jenkov.com/java-concurrency/starvation-and-fairness.html
Java 对序列不作任何保证。所以我想它不是基于线程优先级
我将尝试进一步寻找有关Java如何实际决定谁先走的解释。
其他人提到了公平锁的可用性。如果你真的在乎谁先走,那么你可能有一个实时问题。在这种情况下,您可以使用RTSJ,其中指定了锁获取的顺序和其他语义。有关详细信息,请参阅 RTSJ 规范的“同步”下。引用基本原理部分:
Java的同步代码规则提供了一种互斥的方法,但不能防止无界优先级反转,因此对于实时应用程序来说是不够的。此规范通过强制实施优先级反转控制来增强同步代码的语义,特别是通过提供用于优先级继承和优先级上限仿真的类。优先级继承在实时操作系统中更广泛地实现,因此是必需的,并且是本规范中的初始默认机制。