【问题标题】:monitors & notify & notify all in JavaJava中的monitor & notify和notifyall
【发布时间】:2018-02-12 00:40:03
【问题描述】:

我正在做一个与显示器相关的在线测验。这些是 4 个真假问题和我的答案。如果我的答案是错误的,您能解释一下原因吗?

  1. 如果使用 notifyAll(),在 Java 中使用监视器时肯定不会发生饥饿T

  2. 在 Java F

  3. 中,只有声明为扩展线程或实现可运行的对象才有监视器锁

【问题讨论】:

  • 奇怪的测验。 Java 并没有真正意义上的 Brich-Hansen 监视器。当他看到 Java 时,他评论说“显然我的工作是徒劳的”。
  • 你有理由认为他们错了吗?
  • @shmosel 我没有,只是想确保它们是正确的。
  • @EJP 确切地说,我已经用 Java 编程了 2 年,但从未听说过监视器:/
  • 我认为monitor术语来源于jvm monitorenter/monitorexit指令

标签: java multithreading monitor


【解决方案1】:

如果使用 notifyAll(),在 Java 中使用监视器时绝对不会发生饥饿。 F

如果一个线程因为其他线程抢占它而没有被授予 CPU 时间,则称为“饥饿”。 Check here for more.

  • 使用notifyAll()时,JVM唤醒所有线程,然后全部 线程争用该对象上的锁。现在,CPU 调度程序选择 获取此对象锁定的线程。这意味着使用 notifyAll() 无法避免饥饿,因为某些线程可能总是会失去争用。
  • 此外,线程被无限期阻塞等待进入 同步块,因为其他线程不断被允许 在它之前访问。饥饿也会发生。

仅声明为扩展线程或实现可运行的对象 在 Java 中有一个监视器锁。 F

每个来自java.lang.Object 的类都有监视器锁。 Check here for more.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-17
    • 1970-01-01
    • 2016-12-26
    • 1970-01-01
    • 2011-02-19
    • 2013-07-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多