2016-04-22 15 views
0

私はLinkedBlockingQueue周りに管理簡単な生産者 - 消費者のシナリオで2つのスレッドを持っています。私はtake()を使用する消費者のスレッドでLinkedBlockingQueue - プロデューサ/コンシューマ

つまり私は、要素がキューに入ってくる一方で、消費者をブロックしたいです。

プロデューサスレッドでoffer()を使用してキューに追加してもいいですか?put()ではありませんか?それは何か問題を引き起こすだろうか?私が意味する

は、take()は私もputを使用しなければならない意味するものでは使っていますか?

私はないと思いますが、私は完全に確認したいです。

答えて

1

いいえ、あなたは消費者側で使用どんなプロデューサーにofferを使用して問題はありません。

これは、それが成功するまで、それは各キューにofferを呼び出すことができ、生産者はキューの数の1にプッシュできるようにするための共通のメカニズムになります。最後のキューでputと呼ぶことさえできます。

0

offerputことのみが異なるキューがいっぱいの場合(オプションのタイムアウト付き)offerは、単に(項目を追加せずに)falseを返します(とaddがスローされますが、putは、スペースを持っている完全なキューを待ちます例外)。 (1は、特定のタスクのために優れているときはもちろん、時間があるでしょうが)

は長いので、あなたのコードは、これらの違いを尊重するとして、あなたが使用どちらの方法で問題はありません。

関連する問題