[英]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.