7

プログラムでブロッキング キューの実装を使用しています。要素がデキューされるまでスレッドが待機する時間を知りたいです。私のクライアントは応答をポーリングし、サーバー スレッドはメッセージを提供します。私のコードは次のとおりです。

private BlockingQueue<Message> applicationResponses=  new LinkedBlockingQueue<Message>();

クライアント:

    Message response = applicationResponses.take();

サーバ:

    applicationResponses.offer(message);

クライアント スレッドは永久に待機しますか? その時間を設定したい..(例:1000ms)..それは可能ですか?

4

2 に答える 2

11

はい、要素を取得できるまで永遠に待機します。最大待ち時間が必要な場合は、 poll(time, TimeUnit) を使用する必要があります。

Message response = applicationResponse.poll(1, TimeUnit.SECONDS);

参照: http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/LinkedBlockingQueue.html#poll(long,%20java.util.concurrent.TimeUnit)

于 2013-05-01T06:09:24.717 に答える
2

要素をキューに入れる (提供する) またはキューから取り出す (ポーリングする) オプションの両方に、構成可能なタイムアウトを設定するオプションがあります。以下のメソッドjavadoc:

/**
 * Inserts the specified element into this queue, waiting up to the
 * specified wait time if necessary for space to become available.
 *
 * @param e the element to add
 * @param timeout how long to wait before giving up, in units of
 *        <tt>unit</tt>
 * @param unit a <tt>TimeUnit</tt> determining how to interpret the
 *        <tt>timeout</tt> parameter
 * @return <tt>true</tt> if successful, or <tt>false</tt> if
 *         the specified waiting time elapses before space is available
 * @throws InterruptedException if interrupted while waiting
 * @throws ClassCastException if the class of the specified element
 *         prevents it from being added to this queue
 * @throws NullPointerException if the specified element is null
 * @throws IllegalArgumentException if some property of the specified
 *         element prevents it from being added to this queue
 */
boolean offer(E e, long timeout, TimeUnit unit)
    throws InterruptedException;



/**
 * Retrieves and removes the head of this queue, waiting up to the
 * specified wait time if necessary for an element to become available.
 *
 * @param timeout how long to wait before giving up, in units of
 *        <tt>unit</tt>
 * @param unit a <tt>TimeUnit</tt> determining how to interpret the
 *        <tt>timeout</tt> parameter
 * @return the head of this queue, or <tt>null</tt> if the
 *         specified waiting time elapses before an element is available
 * @throws InterruptedException if interrupted while waiting
 */
E poll(long timeout, TimeUnit unit)
    throws InterruptedException;
于 2013-05-01T06:10:25.110 に答える