Differenza tra metodo sincronizzato e blocco sincronizzato in informatica

Differenza tra metodo sincronizzato e blocco sincronizzato in informatica

Metodo sincronizzato e blocco sincronizzato

La sincronizzazione è la capacità di controllare l’accesso di più thread per condividere le risorse. Senza sincronizzazione, è possibile che un thread modifichi una risorsa condivisa mentre un altro thread sta utilizzando o aggiorna quella risorsa.

Esistono due sintassi di sincronizzazione in Java Language. Le differenze pratiche sono nel controllo dell’ambito e del monitor. Con un metodo sincronizzato, il blocco si ottiene per la durata dell’intero metodo. Con i blocchi sincronizzati è possibile specificare esattamente quando è necessario il blocco.

Fondamentalmente, i blocchi sincronizzati sono più generali e i metodi sincronizzati possono essere riscritti per utilizzare blocchi sincronizzati. Quindi, se vuoi bloccare l’intero oggetto, usa un metodo sincronizzato. Mentre, se vuoi mantenere altre parti dell’oggetto accessibili ad altri thread, usa il blocco sincronizzato.

Se scegli attentamente l’oggetto bloccato, i blocchi sincronizzati porteranno a meno contese, perché l’intero oggetto / classe non è bloccato. Ciò si applica in modo simile ai metodi statici, un metodo statico sincronizzato acquisirà un blocco nell’intero oggetto della classe, mentre un blocco sincronizzato all’interno di un metodo statico acquisirà un blocco nell’oggetto tra parentesi.

La principale differenza tra il blocco sincronizzato e il metodo sincronizzato è che il blocco sincronizzato blocca il codice all’interno del blocco mentre il metodo sincronizzato blocca l’intero oggetto.

Caratteristiche del metodo sincronizzato

  • Il metodo sincronizzato acquisisce un blocco sull’intero oggetto. Ciò significa che nessun altro thread può utilizzare alcun metodo sincronizzato nell’intero oggetto mentre il metodo viene eseguito da un thread.
  • Un metodo sincronizzato utilizza il ricevitore del metodo come blocco, “this” per i metodi non statici e la classe che lo racchiude per i metodi statici.
  • Il metodo sincronizzato si blocca sempre sull’oggetto corrente rappresentato dal blocco a livello di classe, se il suo metodo sincronizzato statico.
  • In caso di metodo sincronizzato, il blocco viene acquisito dal thread quando entra nel metodo e rilasciato quando esce dal metodo, normalmente o lanciando un’eccezione.
  • Per i metodi sincronizzati, il blocco verrà mantenuto per tutto l’ambito del metodo.
  • Un metodo statico sincronizzato acquisirà un blocco nell’intero oggetto della classe.

Caratteristiche del blocco sincronizzato

  • I blocchi sincronizzati acquisiscono un blocco nell’oggetto tra parentesi dopo la parola chiave sincronizzata. Significa che nessun altro thread può acquisire un blocco sull’oggetto bloccato finché il blocco sincronizzato non esce.
  • I blocchi sincronizzati utilizzano l’espressione come un blocco.
  • Il blocco sincronizzato fornisce un controllo granulare sul blocco, poiché è possibile utilizzare qualsiasi blocco arbitrario per fornire l’esclusione reciproca al codice della sezione critica.
  • In caso di blocco sincronizzato, il thread acquisisce il blocco quando entra nel blocco sincronizzato e viene rilasciato quando lascia il blocco sincronizzato.
  • Il blocco sincronizzato può generare NullPointerException se l’espressione fornita come parametro restituisce null, il che non è il caso dei metodi sincronizzati.  
  • Nel blocco sincronizzato, il blocco viene mantenuto solo durante tale ambito di blocco, denominato anche sezione critica.
  • Un blocco sincronizzato all’interno di un metodo statico acquisirà un blocco nell’oggetto tra parentesi.

Differenza tra metodo sincronizzato e blocco sincronizzato in informatica

Differenza tra metodo sincronizzato e blocco sincronizzato

METODO SINCRONIZZATO BLOCCO SINCRONIZZATO
Il metodo sincronizzato acquisisce un blocco sull’intero oggetto. Ciò significa che nessun altro thread può utilizzare alcun metodo sincronizzato nell’intero oggetto mentre il metodo viene eseguito da un thread.   I blocchi sincronizzati acquisiscono un blocco nell’oggetto tra parentesi dopo la parola chiave sincronizzata. Significa che nessun altro thread può acquisire un blocco sull’oggetto bloccato finché il blocco sincronizzato non esce.  
Un metodo sincronizzato utilizza il ricevitore del metodo come blocco, “this” per i metodi non statici e la classe che lo racchiude per i metodi statici.   I blocchi sincronizzati utilizzano l’espressione come un blocco.  
Il metodo sincronizzato si blocca sempre sull’oggetto corrente rappresentato dal blocco a livello di classe, se il suo metodo sincronizzato statico.   Il blocco sincronizzato fornisce un controllo granulare sul blocco, poiché è possibile utilizzare qualsiasi blocco arbitrario per fornire l’esclusione reciproca al codice della sezione critica.  
In caso di metodo sincronizzato, il blocco viene acquisito dal thread quando entra nel metodo e rilasciato quando esce dal metodo, normalmente o lanciando un’eccezione.   In caso di blocco sincronizzato, il thread acquisisce il blocco quando entra nel blocco sincronizzato e viene rilasciato quando lascia il blocco sincronizzato.  
Per i metodi sincronizzati, il blocco verrà mantenuto per tutto l’ambito del metodo.   Nel blocco sincronizzato, il blocco viene mantenuto solo durante tale ambito di blocco, denominato anche sezione critica.  
Un metodo statico sincronizzato acquisirà un blocco nell’intero oggetto della classe.   Un blocco sincronizzato all’interno di un metodo statico acquisirà un blocco nell’oggetto tra parentesi.  

Pubblicato da Vito Lavecchia

Lavecchia Vito Ingegnere Informatico (Politecnico di Bari) Email: [email protected] Sito Web: https://vitolavecchia.altervista.org

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *