Files
java-design-patterns/lazy-loading/src/main/java/com/iluwatar/lazy/loading/Java8Holder.java

35 lines
786 B
Java
Raw Normal View History

package com.iluwatar.lazy.loading;
2015-04-10 20:24:16 +03:00
import java.util.function.Supplier;
/**
*
* This lazy loader is thread safe and more efficient than HolderThreadSafe.
* It utilizes Java 8 functional interface Supplier<T> as Heavy factory.
*
*/
public class Java8Holder {
private Supplier<Heavy> heavy = () -> createAndCacheHeavy();
public Java8Holder() {
System.out.println("Java8Holder created");
}
public Heavy getHeavy() {
return heavy.get();
}
private synchronized Heavy createAndCacheHeavy() {
class HeavyFactory implements Supplier<Heavy> {
private final Heavy heavyInstance = new Heavy();
@Override
public Heavy get() { return heavyInstance; }
}
if (!HeavyFactory.class.isInstance(heavy)) {
heavy = new HeavyFactory();
}
return heavy.get();
}
}