【问题标题】:LinkedBlockingQueue - producer/consumerLinkedBlockingQueue - 生产者/消费者
【发布时间】:2016-04-22 12:22:18
【问题描述】:

在一个简单的生产者-消费者场景中,我有 2 个线程,围绕 LinkedBlockingQueue 进行管理。

在消费者线程中,我使用take(),即我想在元素进入队列时阻止消费者。

如果在生产者线程中我使用offer()而不是put()添加到队列中,是否可以?这会引起任何问题吗?

我的意思是,使用take() 是否意味着我也应该使用put

我猜不是,但我想完全确定。

【问题讨论】:

    标签: java multithreading concurrency java.util.concurrent


    【解决方案1】:

    不,无论您在消费者端使用什么,在生产者上使用offer 都没有问题。

    这将是一种允许生产者推送到多个队列之一的常见机制,它可以在每个队列上调用offer,直到成功。它甚至可以在最后一个队列上调用put

    【讨论】:

      【解决方案2】:

      offerput 的区别仅在于,put 将等待一个完整的队列有空间,而offer(带有可选超时)将简单地返回 false(不添加项目)如果队列已满(add 会抛出异常)。

      只要您的代码尊重这些差异,那么无论您使用哪种方法都没有问题(当然,有时某个方法更适合某项任务)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多