我们只能使用阻塞队列或任何其他数据结构作为线程池任务队列吗?
We can only use a blockingqueue or any other data structures for Threadpool task queue?
您好,我是 java 的并发编程新手。在我在并发编程中看到的所有例子中,每当我们用来定义任务队列时,人们都会使用不同的 blockingqueue 实现。
为什么只阻塞队列?有什么优点和缺点?
为什么不是任何其他数据结构?
好的,我无法确切说明为什么您查看的未指定代码使用某些数据结构而不使用其他数据结构。但是阻塞队列有很好的特性。仅保留固定数量的元素并强制插入项目超过该限制的生产者等待实际上是一个功能。
限制队列大小有助于保护应用程序免受行为不端的生产者的影响,否则生产者可能会用条目填充队列,直到应用程序 运行 内存不足。显然,将任务插入到执行它的任务中会更快,执行者将面临被工作轰炸的风险。
同时让生产者等待对系统施加背压。这样队列让生产者知道它落后了并且不接受更多的工作。生产者等待比不断敲打队列要好;背压让系统优雅地降级。
因此,您的数据结构易于理解,对构建应用程序有实际好处,而且看起来很适合任务队列。人们当然会使用它。
您好,我是 java 的并发编程新手。在我在并发编程中看到的所有例子中,每当我们用来定义任务队列时,人们都会使用不同的 blockingqueue 实现。 为什么只阻塞队列?有什么优点和缺点? 为什么不是任何其他数据结构?
好的,我无法确切说明为什么您查看的未指定代码使用某些数据结构而不使用其他数据结构。但是阻塞队列有很好的特性。仅保留固定数量的元素并强制插入项目超过该限制的生产者等待实际上是一个功能。
限制队列大小有助于保护应用程序免受行为不端的生产者的影响,否则生产者可能会用条目填充队列,直到应用程序 运行 内存不足。显然,将任务插入到执行它的任务中会更快,执行者将面临被工作轰炸的风险。
同时让生产者等待对系统施加背压。这样队列让生产者知道它落后了并且不接受更多的工作。生产者等待比不断敲打队列要好;背压让系统优雅地降级。
因此,您的数据结构易于理解,对构建应用程序有实际好处,而且看起来很适合任务队列。人们当然会使用它。