LinkedBlockingQueue put vs offer
我有一个链接阻塞队列,我在其中执行插入和删除操作。
在链接阻塞队列的情况下,我需要知道哪一个更好put
或offer
。
性能参数是CPU利用率,内存和总吞吐量。
应用程序使用是实时系统,其中可以有多个传入请求和较少的线程来处理我们需要在队列中插入元素的位置。
我阅读了Java文档的put和offer,内部应用程序没有太大区别。
实际上,你无法比较这两者之间的性能, offer
方法只是提供给队列,它不等待或等待指定的时间,但put
方法等待无限长,直到空间可用,所以它们的用法是不同。
使用put
,你不能放松一件物品,记住它会占用你的电话堆栈,否则使用offer
。
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;
文档清楚地回答了这个问题。 优惠不等待,如果队列已达到容量,将“放弃”。 然而,put将等待空间变得可用 – 换句话说,它将阻塞直到空间可用。 因此,报价显然更快,因为它永远不会阻止。