2017-08-23 11 views
0

私はJavaでLinkedBlockingQueueを使用しています。スレッドにリリースする前に、キュー内の要素を保持したいと考えています。言い換えれば、要素を待ち行列から外す前に遅延を設定する必要があります。LinkedBlockingQueueの要素を保持する方法は?

private LinkedBlockingQueue<String> testQue = new LinkedBlockingQueue<String>() 
if (position.equals("leader")) { 
    //process this element as the last one 

できますか? LinkedBlockingQueueのドキュメントで

+0

あなたが達成したいことは私にはっきりしません。あなたはもう少し詳しく説明できますか? – JensS

+0

正しく理解していれば、キューで利用できる要素の処理を遅らせたいと思っていますか?なぜあなたはそれをしたいのですか?あなたがやっていることは、間違った視点の問題を見ているのかもしれません。あなたが達成しようとしていることを説明すれば、誰かがあなたを助けるかもしれません。 – codeCruncher

+0

私は、キューの特定の要素に対する遅延を作成するためにThread.sleepを使用する代わりに、キューを使用しようとしています。つまり、キュー内の要素が「リーダー」である場合、遅延させるか、1秒間待機します。 – CMPE

答えて

0

ルック:https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/LinkedBlockingQueue.html

EのPEEKは、()を取得しますが、削除しません、このキューの先頭。キューが空の場合はnullを返します。

E poll()このキューの先頭を取得および削除します。このキューが空の場合はnullを返します。

E poll(long timeout、TimeUnit unit)このキューの先頭を取得して削除し、必要に応じて要素が使用可能になるまで指定された待機時間を待機します。

は、次の2つのオプションがあります。

  1. 使用peek()プロセス要素をしてpool()作業が完了したときに使用します。また、実際に完了するまで待つ場合はThread.sleep(time)peek()pool()の間に入れることもできます。
  2. 要素を処理するのにどれくらいの時間がかかるかを今度はpoll(long timeout, TimeUnit unit)にしてください。
関連する問題