L'esempio a parole è semplice: immagina una Queue (coda) con capacità limitata che ha metodi put() e get() di tipo "bloccante" (put blocca se non c'è spazio, get blocca se non ci sono elementi).Originariamente inviato da Kilin
a questo punto mi sfugge un po' il meccanismo al di fuori di questo caso particolare, cioè: quand'è che più thread si bloccano su una stessa wait-list, e dove va fatta la notify() per farli uscire? mi faresti un esempio?
Immagina un unico oggetto Q, istanza della coda e immagina 3 thread A B e C. I primi due A e B cercano di fare dei put() ma la coda è piena. Cosa succede? All'interno della put c'è una wait (sull'oggetto stesso) e i due thread si mettono pertanto in wait entrambi su quel oggetto Q. Quando il thread C fa una get(), estrae e quindi libera spazio e fa un notify(). Tra i due thread A e B solo uno viene risvegliato e ha quindi possibilità di completare l'inserimento.
Nel caso di una coda ha più senso un notify() piuttosto che un notifyAll(), perché il get estrae solo 1 elemento .... non avrebbe senso risvegliare più thread.

Rispondi quotando