LinkedBlockingQueue put vs offer

时间:2013-10-17 06:35:22

标签: java multithreading threadpoolexecutor

我有一个链接阻塞队列,我正在执行插入和删除操作。

在链接阻止队列的情况下,我需要知道哪个更好putoffer

性能参数是CPU利用率,内存和总吞吐量。

应用程序使用是实时系统,其中可以有多个传入请求和更少的线程来处理我们需要在队列中插入元素的位置。

我阅读了put和offer的Java文档,内部应用程序没有太大区别。

3 个答案:

答案 0 :(得分:13)

实际上,你无法比较这两者之间的性能,offer方法只是提供给队列,它不等待或等待指定的时间,但put方法等待无限长,直到空间可用,因此它们的使用是不同的。

使用put您无法承担丢失项目的情况,请记住它会占用您的调用堆栈,否则请使用offer

答案 1 :(得分:2)

LinkedBlockingQueue是完全可重入的,poll()方法不会阻止put()。但是,poll()方法会旋转。您可能应该使用queue.take()等待队列中的项目而不是在队列为空时返回null。

还要考虑这种情况, poll(long,TimeUnit)方法将等待一个项目在该时间段内添加到队列中,并在计时器到期时返回null。这是一个更清洁的等待队列中的东西。

    // wait for 2000ms for there to be an object in the queue
   Object o = queue.poll(2000, TimeUnit.MILLISECONDS);
   // no sleep necessary
   return o;

答案 2 :(得分:1)

文档清楚地回答了这个问题。优惠不等待,如果队列已达到容量,将“放弃”。然而,put将等待空间变得可用 - 换句话说,它将阻塞直到空间可用。因此,报价显然更快,因为它永远不会阻止。