Java并发 - 应该阻止还是产生?

tet*_*eto 6 java concurrency multithreading

我有多个线程,每个线程都有自己的专用并发队列,他们所做的就是运行无限循环从中检索消息.可能会发生其中一个队列在一段时间内(可能是几秒钟)没有收到消息,而且它们也可能会突然发生并且需要快速处理.

我想知道在第一种情况下最适合做什么:使用阻塞队列并阻塞线程,直到我有更多输入或执行Thread.yield()?

我希望在给定时间尽可能多的CPU资源可用,因为并发线程的数量可能会随着时间的推移而增加,但我也不希望消息处理落后,因为无法保证线程何时在执行yield()时将被重新安排执行.我知道硬件,操作系统和其他因素在这里发挥了重要作用,但是将它放在一边,从Java(JVM?)的角度来看它,最优化的是什么?

Chr*_*bek 9

总是阻止队列.Java在队列内部产生.

换句话说:如果您在其中一个线程中屈服而不是仅阻塞,则无法在其他线程中获得任何性能优势.


Ste*_*ker 7

您当然希望使用阻塞队列 - 它们是为此目的而设计的(您希望线程在没有工作时不使用CPU时间).

Thread.yield()是一个非常气质的野兽 - 调度程序在它的作用中发挥着重要作用; 一个简单但有效的实现就是什么都不做.