Ho un dubbio sulla sincronizzazione Java. Voglio sapere se ho tre metodi sincronizzati nella mia classe e un thread acquisisce il blocco in un metodo sincronizzato, altri due saranno bloccati? Sto facendo questa domanda perché sono confuso dalla seguente affermazione.Come funziona la sincronizzazione in Java?
Mentre un thread è all'interno di un metodo sincronizzato di un oggetto, tutti gli altri thread che desiderano eseguire questo metodo sincronizzato o qualsiasi altro metodo sincronizzato dell'oggetto devono attendere. Questa restrizione non si applica al thread che ha già il blocco e sta eseguendo un metodo sincronizzato dell'oggetto. Un tale metodo può richiamare altri metodi sincronizzati dell'oggetto senza essere bloccato. I metodi non sincronizzati dell'oggetto possono naturalmente essere richiamati in qualsiasi momento da qualsiasi thread
Qual è la fonte di questa affermazione e qual è la tua confusione? Sembri capirlo. Prestare attenzione al deadlock quando si accede a un metodo sincronizzato da un altro. – Sridhar
Ri: "... gli altri due saranno bloccati". Il thread attualmente in esecuzione che ha già il lock non verrà impedito dal chiamare un altro metodo sincronizzato sullo stesso oggetto, tuttavia qualsiasi altro thread verrà bloccato (cioè forzato ad aspettare fino a che non viene dato il lock). Max ha una buona risposta che parla se stai bloccando l'oggetto stesso (cioè questo) o un'altra variabile oggetto interamente. – Brad