假设我有三个线程,线程 1、线程 2 和线程 3 都共享同一个锁。线程 2 获取锁,执行一些工作,然后通过调用 wait 方法进行阻塞。然后,线程 1 获取锁,执行一些工作,在中间,线程 3 尝试获取锁,但由于线程 1 持有锁而被阻塞。线程 1 完成工作,并在终止之前向线程 2 发出信号,表示它可以重新获取锁。那么接下来会发生什么呢?接下来线程 2 或线程 3 会获取锁吗?
非常感谢您提前抽出时间并提供帮助。
最佳答案
如果不指定优先级,谁先到就获得锁。
虽然互斥
可以提供安全
属性,但它不能确保 active
属性。可能存在这样的情况:某个线程始终先获取锁,从而导致饥饿
(其他线程永远等待,因为有人一直占用)。
Google 突出显示关键字将帮助您了解更多信息。我发现这些幻灯片非常全面http://www.cs.cornell.edu/Courses/cs414/2004su/slides/05_schedule.pdf
关于Java 锁和条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23233623/