【发布时间】:2019-04-11 18:17:24
【问题描述】:
我有一个消费者线程在从队列中删除时阻塞。 在某些时间段内,我知道不会将任何内容添加到队列中。
我的问题是:是否值得增加管理何时启动/停止线程的复杂性,还是应该让它等到队列再次开始获取元素?
【问题讨论】:
-
注意:您不能重新启动已停止的线程;你必须创建一个新的。
标签: java multithreading
我有一个消费者线程在从队列中删除时阻塞。 在某些时间段内,我知道不会将任何内容添加到队列中。
我的问题是:是否值得增加管理何时启动/停止线程的复杂性,还是应该让它等到队列再次开始获取元素?
【问题讨论】:
标签: java multithreading
如果您使用的并发队列实现是值得的,那么线程将不会在很长时间内为busy-waiting。出于性能原因,某些实现可能会短暂执行此操作,但之后它将阻塞并且不会消耗 CPU 周期。因此,停止线程和阻塞线程之间的区别或多或少变得毫无意义。
使用并发队列。见Which concurrent Queue implementation should I use in Java?
【讨论】:
在处理多线程时,最好的做法是在遇到性能问题时采取行动。否则,我会保持原样以避免麻烦。
【讨论】:
我认为线程被阻塞(非活动等待)对性能没有太大影响。如果线程持有可以在那时释放的昂贵资源,这可能是有意义的。我会尽量保持简单,尤其是在并发环境中,复杂性会导致奇怪的错误。
【讨论】: