Corretto, comunque la domanda chiede quale lock ed è ovvio, perché esplicito, il this ovvero l'oggetto su cui è invocato il metodo.Originariamente inviato da leon09
1. Quale lock usano i blocchi sincronizzati: synchronized(this){...}?
Un thread alla volta siccome fanno parte di un unico oggetto (stesso oggetto = setto lock = mutua esclusione)
Corretto ma anche qui chiede quale lock, idem è il this implicitamente.Originariamente inviato da leon09
2. Quale lock usa il metodo aggiungi?
Un thread alla volta siccome proprio tutto il metodo aggiungi(Prodotto p) è sincronizzato
Corretto.Originariamente inviato da leon09
3. E' possibile che più thread eseguano l'istruzione (*) contemporaneamente?
Sì perchè dopo il conta++ il blocco non è più sincronizzato
Corretto.Originariamente inviato da leon09
4. E' possibile che più thread eseguano l'istruzione (**) contemporaneamente?
No perchè tutto il metodo aggiungi(Prodotto p) è sincronizzato
Corretto.Originariamente inviato da leon09
5. E' possibile che un thread esegua l'istruzione (*) e contemporaneamente un altro thread esegua l'istruzione (**)?
Sì perchè l'istruzione (*) non è sincronizzata
Riguardo a 4. e 5. no, direi che non cambia proprio nulla.Originariamente inviato da leon09
6. Si modifichi il metodo aggiungi cancellando l'istruzione while. Cambia qualcosa nel
comportamento della classe Magazzino, in particolare riguardo alle domande 4 e 5?
Togliendo il while chiunque deve attendendere anche se può svolgere la proprio operazione. No le risposte alle domande 4 e 5 rimangono invariate.
Se però si toglie il while non è più corretto il comportamento del wait. Il wait() andrebbe sempre racchiuso in un ciclo che testa una condizione.

Rispondi quotando