TKingu ha scritto:
Se, all'interno di un metodo synchronized uso un thread1.join, dove thread1 è un thread creato e referenziato, rischio il deadlock?
Certo,
è possibile.
Scenario: il thread A ha acquisito il lock su un oggetto X e all'interno del blocco synchronized fa un join() su un thread B. Il thread B va avanti per la sua strada e ad un certo punto cerca di acquisire il lock su quello
stesso oggetto X. Ovviamente va in sospensione perché il lock è tenuto al momento dal thread A.
Quindi: il thread B non può continuare perché attende di acquisire il lock e il thread A non può continuare perché attende la fine di B (che non può procedere avanti e poi terminare).
E questo si chiama appunto ...
deadlock.
TKingu ha scritto:
Oppure join rilascia il lock del synchronized?
No, join() NON rilascia alcun lock (l'unico metodo che rilascia il lock è il wait() degli oggetti, che è fatto apposta per sfruttare, insieme ai notify(), la "condition-queue" intrinseca degli oggetti).