在消耗的资源方面,阻塞线程和等待线程之间有什么区别(cpu cycles等)。 我是否宁愿调用notify()来唤醒一个线程并让其他线程处于等待状态;或者调用notifyall()让所有等待线程进入阻塞状态(成功转换为runnable的线程除外)?
答案 0 :(得分:4)
在消耗的资源方面,阻塞线程和等待线程之间有什么区别(cpu cycles等)。
无。线程在等待或阻塞时不会消耗CPU周期。
我宁愿调用notify()来唤醒一个线程并让其他线程处于等待状态;还是调用notifyall()让所有等待线程进入阻塞状态(成功转换为runnable的线程除外)?
如果notifyAll()
导致除了一个等待线程之外的所有线程都返回等待状态...并且notify()
将唤醒将继续的线程...然后notify()
更好。每次线程被唤醒都会花费CPU时间。
但是,如果您正在努力理解wait / notify / notifyAll及其性能特征,那么最好使用java.util.concurrent
包提供的更高级别的并发类之一。