tet*_*eto 6 java concurrency multithreading
我有多个线程,每个线程都有自己的专用并发队列,他们所做的就是运行无限循环从中检索消息.可能会发生其中一个队列在一段时间内(可能是几秒钟)没有收到消息,而且它们也可能会突然发生并且需要快速处理.
我想知道在第一种情况下最适合做什么:使用阻塞队列并阻塞线程,直到我有更多输入或执行Thread.yield()?
我希望在给定时间尽可能多的CPU资源可用,因为并发线程的数量可能会随着时间的推移而增加,但我也不希望消息处理落后,因为无法保证线程何时在执行yield()时将被重新安排执行.我知道硬件,操作系统和其他因素在这里发挥了重要作用,但是将它放在一边,从Java(JVM?)的角度来看它,最优化的是什么?
您当然希望使用阻塞队列 - 它们是为此目的而设计的(您希望线程在没有工作时不使用CPU时间).
Thread.yield()是一个非常气质的野兽 - 调度程序在它的作用中发挥着重要作用; 一个简单但有效的实现就是什么都不做.