Citazione da Inside the Java Virtual Machine
Un thread nella Java virtual machine richiede un blocco quando arriva all'inizio di una regione di monitoraggio. In Java, esistono due tipi di aree di monitoraggio: istruzioni sincronizzate e metodi sincronizzati.
Tenere sotto controllo
Un monitor è come un edificio che contiene una stanza speciale che può essere occupata da un solo thread alla volta. La stanza di solito contiene alcuni dati. Dal momento in cui un thread entra in questa stanza fino a quando esce, ha accesso esclusivo a tutti i dati nella stanza. Entrare nell'edificio del monitor è chiamato "entrare nel monitor". L'ingresso nella stanza speciale all'interno dell'edificio è chiamato "acquisizione del monitor". Occupare la stanza si chiama "possedere il monitor" e lasciare la stanza si chiama "rilasciare il monitor". L'uscita dall'intero edificio viene chiamata "uscita dal monitor".
Oltre ad essere associato a un po 'di dati, un monitor è associato a uno o più bit di codice, che in questo libro verranno chiamati regioni di monitoraggio.
Come accennato in precedenza, il linguaggio fornisce due modi incorporati per identificare le aree di monitoraggio nei programmi: istruzioni sincronizzate e metodi sincronizzati. Questi due meccanismi, che implementano l'aspetto di mutua esclusione della sincronizzazione, sono supportati dal set di istruzioni della macchina virtuale Java.
Serratura
Per implementare la capacità di mutua esclusione dei monitor, la Java virtual machine associa un blocco (a volte chiamato mutex) a ogni oggetto e classe. Un blocco è come un privilegio che solo un thread può "possedere" alla volta.
Un singolo thread può bloccare più volte lo stesso oggetto. Per ogni oggetto, la Java virtual machine mantiene un conteggio del numero di volte in cui l'oggetto è stato bloccato. Un oggetto sbloccato ha un conteggio pari a zero. Quando un thread acquisisce il blocco per la prima volta, il conteggio viene nuovamente incrementato a uno. Ogni volta che il thread acquisisce un blocco sullo stesso oggetto, il conteggio viene nuovamente incrementato.