【问题标题】:Blocking threads in java - to be avoided?java中的阻塞线程-要避免吗?
【发布时间】:2012-09-02 00:59:51
【问题描述】:

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

【问题讨论】:

  • 这个网站discusses the same issues 可能会有所帮助。您是否有机会避免直接使用waitnotify 并依赖java.util.concurrent 包中的某些类?

标签: java multithreading synchronized


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2015-07-20
    • 1970-01-01
    • 2011-10-18
    • 2014-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-06
    • 2012-06-06
    相关资源
    最近更新 更多