gpt4 book ai didi

java - 'blocking' 队列是否会破坏多线程的目的

转载 作者:搜寻专家 更新时间:2023-10-31 08:09:03 26 4
gpt4 key购买 nike

如果队列已满,ArrayBlockingQueue 将阻塞生产者线程,如果队列为空,它将阻塞消费者线程。

阻塞的概念是否违背了多线程的理念?如果我有一个“主”线程,假设我想将所有“日志记录” Activity 委托(delegate)给另一个线程。所以基本上在我的主线程中,我创建了一个 Runnable 来记录输出,并将 Runnable 放在 ArrayBlockingQueue 上。这样做的全部目的是让“主”线程立即返回,而不会在昂贵的日志记录操作中浪费任何时间。

但是如果队列已满,主线程将被阻塞并等待直到有可用的位置。那么它对我们有什么帮助呢?

最佳答案

队列不会无缘无故地阻塞,它阻塞是为了向系统引入额外的质量。在这种情况下,它是防止饥饿

想象一组线程,其中一个线程非常快速地生成工作单元。如果允许队列无限增长,“快速生产者”队列可能会占用所有生产能力。有时,防止此类副作用比畅通所有线程更重要。

关于java - 'blocking' 队列是否会破坏多线程的目的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17494871/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com