java - Java 中的监视、通知和notifyall

标签 java multithreading monitor

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

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

  2. Java 中只有声明为扩展线程或实现 Runnable 的对象才具有监视器锁F

最佳答案

Starvation will definitely not occur when using monitors in Java if notifyAll() is used. F

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

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

Only objects that are declared to extend thread or implement runnable have a monitor lock in Java. F

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

关于java - Java 中的监视、通知和notifyall,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48738047/

相关文章:

c++ - Windows Spooler Events API 不会为网络打印机生成事件

java - 回调监听器总是返回 null

java - Swing 中的图像幻灯片

java - 处理 "check list"项的正确方法

c++ - 我的双重检查锁定模式实现是否正确?

C#生产者/消费者

c++ - 使用 C++ 监视注册表

Java重新实现Observer

.net - CLI库代码Thread Safe中的Comparer类是否安全?

multithreading - asp.net mvc 3应用程序需要写一行,然后等待该行被更新,然后再更新UI