====== Java Lazy Evaluation ====== * 늦은 초기화, Lazy initialization * [[https://4comprehension.com/leveraging-lambda-expressions-for-lazy-evaluation-in-java/|Leveraging Lambda Expressions for Lazy Evaluation in Java – { 4Comprehension }]] * [[https://github.com/pivovarit/articles/tree/master/java-lazy-initialization|articles/java-lazy-initialization at master · pivovarit/articles]] * [[java:guava:supplier|Guava Supplier]] * [[https://commons.apache.org/proper/commons-lang/javadocs/api-release/org/apache/commons/lang3/concurrent/LazyInitializer.html|LazyInitializer (Apache Commons Lang 3.10 API)]] ===== Effective Java 3rd Item 83 - double check ===== * https://github.com/jbloch/effective-java-3e-source-code/blob/master/src/effectivejava/chapter11/item83/Initialization.java * [[https://github.com/jbloch/effective-java-3e-source-code/issues/8|Double-check idiom for lazy initialization of instance fields. Broken example. · Issue #8 · jbloch/effective-java-3e-source-code]] // Double-check idiom for lazy initialization of instance fields - Page 334 private volatile FieldType field4; // NOTE: The code for this method in the first printing had a serious error (see errata for details)! private FieldType getField4() { FieldType result = field4; if (result != null) // First check (no locking) return result; synchronized(this) { if (field4 == null) // Second check (with locking) field4 = computeFieldValue(); return field4; } }