Java/Interblocco ricontrollato: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
m Metto il box completo
m Update syntaxhighlight tags - remove use of deprecated <source> tags
 
Riga 6:
 
==Esempio==
<sourcesyntaxhighlight lang=java>
public class DoubleCheckedLocking {
private static Resource _instance;
Riga 20:
}
}
</syntaxhighlight>
</source>
Inizializzare un oggetto comporta la scrittura di alcune variabili (stato dell'oggetto), pubblicare un oggetto riguarda la scrittura di altre variabili (il reference). Se non si assicura che pubblicare l'oggetto accada prima che un thread possa leggerne il reference, la scrittura del reference può essere riordinata con le scritture dello stato dell'oggetto.
 
Riga 26:
 
Senza utilizzare tecniche troppo elaborate e spesso inutili è possibile risolvere il problema con il seguente codice:
<sourcesyntaxhighlight lang=java>
public class EagerInstantiation {
private static final Resource _instance = new Resource();
Riga 33:
}
}
</syntaxhighlight>
</source>
Un'alternativa è l'utilizzo di una variabile booleana che mantenga lo stato dell'inizializzazione dell'istanza del singleton. Questo impedisce che thread concorrenti possano ottenere un riferimento all'istanza prima che il costruttore dell'oggetto abbia terminato e reso l'oggetto consistente:
<sourcesyntaxhighlight lang=java>
public class DoubleCheckedLocking {
private static Resource _instance;
Riga 51:
}
}
</syntaxhighlight>
</source>
Il momento in cui avviene l'istruzione di assegnazione alla variabile booleana garantisce che il costruttore abbia terminato l'inizializzazione dell'oggetto.