就消耗的资源(cpu 周期等)而言,阻塞线程和等待线程有什么区别。我宁愿调用 notify() 来唤醒一个线程并让其他线程处于等待状态;还是调用 notifyall() 让所有等待线程进入阻塞状态(成功转换为可运行的线程除外)?
问问题
154 次
1 回答
4
就消耗的资源(cpu 周期等)而言,阻塞线程和等待线程有什么区别。
没有任何。线程在等待或阻塞时不消耗 CPU 周期。
我宁愿调用 notify() 来唤醒一个线程并让其他线程处于等待状态;还是调用 notifyall() 让所有等待线程进入阻塞状态(成功转换为可运行的线程除外)?
如果notifyAll()
将导致除一个等待线程之外的所有线程返回等待状态......并且notify()
将唤醒能够继续的线程......那么notify()
更好。每次唤醒线程都会消耗 CPU 时间。
但是,如果您难以理解 wait/notify/notifyAll 及其性能特征,最好使用java.util.concurrent
包提供的更高级别的并发类之一。
于 2012-09-08T11:16:18.887 回答