2013-10-17 13 views
11

私は、挿入と削除操作を実行するリンクブロッキングキューを持っています。LinkedBlockingQueue対提供オファー

リンクブロッキングキューの場合、どちらが良いかを知る必要があります。putまたはofferです。

パフォーマンスパラメータは、CPU使用率、メモリ、および全体のスループットです。

アプリケーションの使用方法は、複数の着信要求があり、キューに要素を挿入する必要がある場所を処理するスレッドが少ないリアルタイムシステムです。

私はputのJavaドキュメントを読んで、内部アプリケーションに大きな違いはありませんでした。

答えて

11

実際には、offerメソッドはキューに提供するだけであり、指定された時間だけ待機するか待機するのではなく、putメソッドはスペースが使用できるようになるまで無限に待機しますが、その使用法は異なる。

putを使用すると、アイテムを紛失してしまう可能性があります。コールスタックを保持することに注意してください。そうでない場合はofferを使用してください。

1

LinkedBlockingQueueは完全にリエントラントであり、poll()メソッドはput()をブロックしません。ただし、poll()メソッドは回転します。キューが空の場合にnullを返すのではなく、キューに項目があるのを待つqueue.take()を使用しているはずです。

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; 
1

ドキュメントはこの質問に対する回答を明確にしています。オファーは待ちませんし、待ち行列が容量に達した場合は「放棄」します。しかし、putはスペースが利用可能になるのを待つでしょう - 言い換えれば、スペースが利用可能になるまでブロックされます。したがって、それはブロックされないので、オファーは明らかに高速です。

関連する問題