4

我知道BlockingQueue使用该take() 方法让线程吸吮 a 的元素将等待一个元素可用(除非它被中断)。

我有两个问题:

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 回答