Java 锁和条件

标签 java multithreading locking

假设我有三个线程,线程 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/

相关文章:

java - JPanel 中的多个动画(线程)

python - 使用Python的多处理模块的同步问题

mysql - 间歇性地从 mysql innodb 查询中获取旧数据

java - Android Manifest 未找到其他 XML 资源

Java ldap 身份验证问题

java - 在 Java 中实现多消费者多生产者的问题

ios - API 调用阻塞 UI 线程 Swift

c# - 使用 Stream.BeginRead 的顺序异步读取

java - JPA 2.1 自定义命名策略?

java - 从不同的对象访问对象的内部类