我有一个链接的阻塞队列,我在其中执行插入和删除操作。
我需要知道在链接阻塞队列的情况下put和offer哪个更好。
性能参数包括CPU利用率、内存和总体吞吐量。
应用程序使用是实时系统,其中可以有多个传入的请求和更少的线程来处理我们需要在队列中插入元素的地方。
我读过put和offer的Java文档,内部应用程序没有太大区别。
发布于 2013-10-17 14:52:52
实际上,您不能比较这两种方法的性能,offer方法只是提供给队列,它不会等待或等待指定的时间,但是put方法会无限期地等待,直到空间可用,所以它们的用法是不同的。
在你不能丢失项目的地方使用put,记住它会阻碍你的调用堆栈,否则就使用offer。
发布于 2013-10-17 14:42:16
轮询是完全可重入的,LinkedBlockingQueue ()方法不会阻塞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;发布于 2013-10-17 14:43:28
文档清楚地说明了这个问题的答案。Offer不会等待,如果队列已达到容量,它将“放弃”。然而,put将等待空间变为可用--换句话说,它将阻塞,直到空间可用。因此,offer显然更快,因为它从不阻塞。
https://stackoverflow.com/questions/19419805
复制相似问题