Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


Riepilogo sincronizzazione Thread in Java, Slide di Informatica

Appunti Java Thread sincronizzazione

Tipologia: Slide

2022/2023

In vendita dal 21/08/2023

sebastiano-garro
sebastiano-garro 🇮🇹

5

(1)

64 documenti

1 / 7

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
Java Thread
pf3
pf4
pf5

Anteprima parziale del testo

Scarica Riepilogo sincronizzazione Thread in Java e più Slide in PDF di Informatica solo su Docsity!

Java Thread

Riepilogando….Sincronizzazione indiretta

  • Ogni oggetto ha associato a sè un singolo lock
  • Quando un metodo/blocco è dichiarato synchronized, la sua esecuzione richiede il possesso del lock sull’oggetto interessato
  • Se quest’ultimo è già posseduto da un altro thread, il thread che chiama il metodo synchronized si blocca e viene messo nell’entry set per il lock di quell’oggetto
  • Il lock sull’oggetto viene rilasciato quando il thread che lo detiene esce dal metodo/blocco

Sincronizzazione diretta

  • Meccanismo di “wait-notify”: oltre al lock e alla coda entry set, la JVM associa implicitamente ad ogni oggetto anche una coda di attesa dei thread detta wait set
  • I thread entrano ed escono da questa coda utilizzando rispettivamente i due metodi: wait() e notify() invocabili solo quando il thread detiene il lock dell’oggetto (all’interno di un blocco o metodo sincronizzato)

Metodo wait()

  • wait(): blocca l’esecuzione del thread invocante in attesa che un altro thread invochi i metodi notify() o notifyAll() per quell’oggetto. Il lock viene rilasciato al momento della invocazione
  • Il thread invocante deve essere in possesso del lock sull’oggetto (ossia la wait() deve essere eseguita all’interno di un metodo o sezione synchronized altrimenti viene lanciata un’eccezione.
  • Quando un thread esegue una wait() si porta in stato Not-Runnable non può essere messo in esecuzione dallo scheduler. wait-set

Metodo notify()

  • Riassumendo……quando un thread chiama il metodo notify() (solitamente alla fine del blocco/metodo sincronizzato) questa chiamata: - seleziona arbitrariamente un thread T dal wait set (se il wait set è vuoto, non viene eseguita nessuna azione) - sposta T dal wait set all’entry set - cambia lo stato di T da bloccato ad eseguibile - Ora T è selezionabile per competere per il lock con gli altri thread