【问题标题】:We can only use a blockingqueue or any other data structures for Threadpool task queue?Threadpool 任务队列只能使用阻塞队列或任何其他数据结构吗?
【发布时间】:2017-11-14 02:12:16
【问题描述】:

您好,我是 Java 并发编程的新手。在我在并发编程中看到的所有示例中,每当我们用于定义任务队列时,人们使用不同的阻塞队列实现。 为什么只有阻塞队列?有什么优点和缺点? 为什么没有其他数据结构?

【问题讨论】:

  • 太宽泛了 - 建议您阅读一本书的前几章,例如Java 并发实践。
  • 感谢您的回答苗条..是的,这个问题太宽泛了..我只是想知道为什么会这样.. :)

标签: java multithreading concurrency threadpool threadpoolexecutor


【解决方案1】:

好的,我无法确切说明为什么您查看的未指定代码使用某些数据结构而不是其他数据结构。但是阻塞队列有很好的特性。仅保留固定数量的元素并迫使将插入超过该限制的项目的生产者等待实际上是一个功能。

限制队列大小有助于保护应用程序免受行为不端的生产者的影响,否则可能会在队列中填满条目,直到应用程序内存不足。显然,将任务插入到任务中会更快,因为它是执行它,执行者将面临被工作轰炸的风险。

同时让生产者等待会向系统施加背压。这样,队列就可以让生产者知道它落后并且不接受更多工作。生产者等待总比不断敲击队列要好;背压让系统优雅地降级。

所以你有一个易于理解的数据结构,对构建应用程序有实际好处,并且看起来很适合任务队列。人们当然会使用它。

【讨论】:

  • 感谢内森的回答。我有一个概述或想法为什么会这样...... :)
猜你喜欢
  • 1970-01-01
  • 2014-10-16
  • 2017-03-11
  • 2019-02-20
  • 1970-01-01
  • 2014-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多