4

メソッドBlockingQueueを使用してスレッドが要素を吸い込むと、要素が利用可能になるまで待機することを理解しています(中断されない限り)。take()

2 つの質問があります。

i) 要素が使用可能になるとすぐに、スレッドは自動的に起動されますか、それとも遅延がありますか (つまり、スレッドは後でそれ自体をチェックします)?

ii) 遅延がある場合、スレッドをウェイクアップすることは意味がありますか (たとえば、明示的に中断することによって)? レイテンシとパフォーマンスについて考えています。

4

1 に答える 1

4

追加の遅延はありません。メソッド呼び出しは、要素が使用可能であるか、スレッドが中断された場合に戻ります。

Retrieves and removes the head of this queue, waiting if necessary until an element becomes available.

Returns:
    the head of this queue 
Throws:
    InterruptedException - if interrupted while waiting

BlockinQueueこれを自動的に行っています (impl. of ArrayBlockingQueue)。

// in add etc.
notEmpty.signal();

// in take()
while(count == 0) 
  notEmpty.await();
于 2011-10-08T15:44:01.167 に答える