1

就消耗的资源(cpu 周期等)而言,阻塞线程和等待线程有什么区别。我宁愿调用 notify() 来唤醒一个线程并让其他线程处于等待状态;还是调用 notifyall() 让所有等待线程进入阻塞状态(成功转换为可运行的线程除外)?

4

1 回答 1

4

就消耗的资源(cpu 周期等)而言,阻塞线程和等待线程有什么区别。

没有任何。线程在等待或阻塞时不消耗 CPU 周期。

我宁愿调用 notify() 来唤醒一个线程并让其他线程处于等待状态;还是调用 notifyall() 让所有等待线程进入阻塞状态(成功转换为可运行的线程除外)?

如果notifyAll()将导致除一个等待线程之外的所有线程返回等待状态......并且notify()将唤醒能够继续的线程......那么notify()更好。每次唤醒线程都会消耗 CPU 时间。

但是,如果您难以理解 wait/notify/notifyAll 及其性能特征,最好使用java.util.concurrent包提供的更高级别的并发类之一。

于 2012-09-08T11:16:18.887 回答