我正在做一个与显示器相关的在线测验。这就是 4 个对错问题以及我的答案。如果我的答案是错误的,您能解释一下原因吗?
如果使用notifyAll(),Java中使用监视器时肯定不会出现饥饿T
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/