LinkedBlockingQueue put vs offer

2022-09-03 14:26:49

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

我需要知道哪一个更好,或者在链接阻塞队列的情况下。putoffer

性能参数包括 CPU 利用率、内存和总体吞吐量。

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

我读了Java文档的放置和报价,内部应用程序没有太大区别。


答案 1

实际上,您无法比较这两者之间的性能,方法是仅向队列提供,并且它不会等待或等待指定的时间,但是该方法会无限期地等待很长时间,直到空间可用,因此它们的用法是不同的。offerput

在您无法承受丢失物品的地方使用,请记住它会阻碍您的调用堆栈,否则使用 .putoffer


答案 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;