Java 并发 - 应该阻塞还是让步?

标签 java multithreading concurrency

我有多个线程,每个线程都有自己的私有(private)并发队列,它们所做的只是运行一个无限循环,从中检索消息。可能有一个队列在一段时间内(可能几秒钟)没有收到消息,而且它们可能会大量涌入,因此需要快速处理。

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

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

最佳答案

总是阻塞在队列中。 Java 在内部队列中产生。

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

关于Java 并发 - 应该阻塞还是让步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2412364/

相关文章:

java - 使用“玩”! 2.0.4 带有 Play2war 插件

java - Android - 无法在启动屏幕上播放歌曲

java - Java中如何引用一个引用?

c# - Thread.Abort() 是如何工作的?

java - 使用 wait/notify 创建 Event 类

sql - 功能键和并发

java jdbc 设计模式 : handle many inserts

java - 通过 Java ProcessBuilder 激活 virtualenv

时间:2019-03-17 标签:c#.nettasks/threadingconsoleapplication

javascript - 两个队列,一个并发1,另一个并发3