2013-10-17 153 views
11

我有一個鏈接的阻塞隊列,我正在執行插入和刪除操作。LinkedBlockingQueue vs vs offer

我需要知道哪一個是連接阻塞隊列的情況下更好地putoffer

性能參數是CPU利用率,內存和整體吞吐量。

應用程序使用情況是實時系統,可以有多個傳入請求和較少的線程來處理我們需要在隊列中插入元素的位置。

我讀了put和offer的Java文檔,內部應用沒有太大的區別。

回答

11

事實上,你不能在這兩者之間的業績比較,該offer方法是隻提供到隊列中,它不會等待或等待指定的時間,但put方法等待無限長,直到可用空間,所以它們的用法是不同的。

使用put在這裏你不能鬆動一件物品,記住它會阻止你的通話堆棧,否則使用offer

1

LinkedBlockingQueue是完全可重入的,poll()方法不會阻塞put()。但是,poll()方法會旋轉。您可能應該使用queue.take(),它等待隊列中有一個項目,而不是在隊列爲空時返回null。

也可以考慮這種情況下, 調查(長,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; 
1

該文檔使問題的答案很明確。如果隊列已達到容量,報價不會等待並「放棄」。然而,put會等待空間變得可用 - 換句話說,它會阻塞,直到空間可用。因此,提供顯然更快,因爲它永遠不會阻止。

相關問題