我知道BlockingQueue
使用该take()
方法让线程吸吮 a 的元素将等待一个元素可用(除非它被中断)。
我有两个问题:
i) 线程是否会在元素可用时自动唤醒或是否存在延迟(即线程稍后会检查自身)?
ii)如果有延迟,唤醒线程是否有意义(例如通过显式中断它)?我正在考虑延迟和性能。
我知道BlockingQueue
使用该take()
方法让线程吸吮 a 的元素将等待一个元素可用(除非它被中断)。
我有两个问题:
i) 线程是否会在元素可用时自动唤醒或是否存在延迟(即线程稍后会检查自身)?
ii)如果有延迟,唤醒线程是否有意义(例如通过显式中断它)?我正在考虑延迟和性能。
没有额外的延迟。如果元素可用或线程中断,则方法调用返回。
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();