Podczas czytania kodu źródłowego ArrayBlockingQueue
znalazłem komentarz wyjaśniający, że używa „klasyczny algorytm dwóch warunek znaleźć w każdym podręczniku”:dlaczego współbieżności sterowania wykorzystuje klasyczne dwa warunek algorytm
/*
* Concurrency control uses the classic two-condition algorithm
* found in any textbook.
*/
/** Main lock guarding all access */
private final ReentrantLock lock;
/** Condition for waiting takes */
private final Condition notEmpty;
/** Condition for waiting puts */
private final Condition notFull;
Dlaczego korzysta z klasycznego algorytmu dwuwarunkowego (notEmpty, notFull)?
pozwala ona tylko obudzić wątki zainteresowanych cokolwiek się stało. Na przykład wątek próbujący "wziąć" z pustej kolejki jest zainteresowany tylko tym, że kolejka nie jest pusta (jest coś do zrobienia), ale nie dba o to, że kolejka nie jest pełna. – assylias
To jest miła * odpowiedź * :) –
Twoje pytanie sugeruje, że nie zgadzasz się lub nie rozumiesz decyzji autora. Jakie inne podejście wiesz, że mógł wybrać zamiast tego? – seh