[英]Java Blocking Queue Implementation Questions
正如一些评论中已经提到的那样,第一个实现仅使用传统的wait()/ notify()机制,其中一个线程等待(当然释放锁)供其他线程通知。
第二个使用不同的锁进行放置和取出操作。 因此,各个操作(同时put()或take())是同步的。 但是当队列已满或为空时,它们需要彼此通信。 因此,它们通过condition
彼此交互。 签出两种私人方法-
/**
* Signals a waiting take. Called only from put/offer (which do not
* otherwise ordinarily lock takeLock.)
*/
private void signalNotEmpty() {
final ReentrantLock takeLock = this.takeLock;
takeLock.lock();
try {
notEmpty.signal();
} finally {
takeLock.unlock();
}
}
/**
* Signals a waiting put. Called only from take/poll.
*/
private void signalNotFull() {
final ReentrantLock putLock = this.putLock;
putLock.lock();
try {
notFull.signal();
} finally {
putLock.unlock();
}
}
put
方法向尝试从空队列中进行/轮询的其他线程发出信号,而take
方法向试图将元素放入完整队列的其他线程发出信号。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.