Warum Double Checked Locking in Joshua Bloch Effective Java Example 25% schneller ist
Hallo, unten ist das Snippet von Effective Java 2nd Edition. Hier behauptet der Autor, dass der folgende Code 25% schneller ist als in dem, in dem Sie keine Ergebnisvariable verwenden. Laut dem Buch "Diese Variable stellt sicher, dass das Feld nur einmal gelesen wird, wenn es bereits initialisiert ist." . Ich kann nicht verstehen, warum dieser Code nach der Initialisierung des Werts schnell ist, im Vergleich zu, wenn wir das Ergebnis der lokalen Variablen nicht verwenden. In beiden Fällen haben Sie nach der Initialisierung nur einen flüchtigen Lesevorgang, unabhängig davon, ob Sie das Ergebnis der lokalen Variablen verwenden oder nicht.
// Double-check idiom for lazy initialization of instance fields
private volatile FieldType field;
FieldType getField() {
FieldType result = field;
if (result == null) { // First check (no locking)
synchronized(this) {
result = field;
if (result == null) // Second check (with locking)
field = result = computeFieldValue();
}
}
return result;
}