tagan ha scritto:
ho visto altri esempi in cui si trova in un ciclo while e usano una variabile booleana che viene settata al termine di una certa operazione. una cosa del genere:
Sì ma è solo un caso d'esempio. Quello che conta è la condizione in generale. Potrebbe essere appunto una variabile booleana a true (o false), un contatore uguale 0, oppure una lista "vuota", ecc...
Finché "regge" questa condizione, il thread corrente deve stare/restare in wait.
tagan ha scritto:
e quello più strano join...!
A dire il vero, join() è uno dei più semplici da capire. E tra l'altro non c'entra nulla con il lock intrinseco degli oggetti (né con i wait/notify).
Il join serve banalmente per attendere la terminazione di un altro thread.
// Sono nel thread A
//...
threadB.join(); // attende la fine del thread B
// qui sono certo che thread B è terminato
È anche questo un meccanismo di sincronizzazione ma non c'entra appunto con i lock.