我有多个线程,每个线程都有自己的私有(private)并发队列,它们所做的只是运行一个无限循环,从中检索消息。可能有一个队列在一段时间内(可能几秒钟)没有收到消息,而且它们可能会大量涌入,因此需要快速处理。
我想知道在第一种情况下最适合做什么:使用阻塞队列并阻塞线程直到我有更多输入或执行 Thread.yield()?
我希望在给定时间有尽可能多的 CPU 资源可用,因为并发线程的数量可能会随着时间的推移而增加,但我也不希望消息处理落后,因为无法保证当执行 yield() 时线程将被重新安排执行。我知道硬件、操作系统和其他因素在这里起着重要作用,但抛开这些并从 Java(JVM?)的角度来看,什么是最佳的?
最佳答案
总是阻塞在队列中。 Java 在内部队列中产生。
换句话说:如果您在其中一个线程中让步而不是仅仅阻塞,您将无法在其他线程中获得任何性能优势。
关于Java 并发 - 应该阻塞还是让步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2412364/