在java中阻塞线程 - 要避免吗?

时间:2012-09-08 10:48:09

标签: java multithreading synchronized

在消耗的资源方面,阻塞线程和等待线程之间有什么区别(cpu cycles等)。 我是否宁愿调用notify()来唤醒一个线程并让其他线程处于等待状态;或者调用notifyall()让所有等待线程进入阻塞状态(成功转换为runnable的线程除外)?

1 个答案:

答案 0 :(得分:4)

  

在消耗的资源方面,阻塞线程和等待线程之间有什么区别(cpu cycles等)。

无。线程在等待或阻塞时不会消耗CPU周期。

  

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

如果notifyAll()导致除了一个等待线程之外的所有线程都返回等待状态...并且notify()将唤醒将继续的线程...然后notify()更好。每次线程被唤醒都会花费CPU时间。

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