All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.davidbracewell.Lazy Maven / Gradle / Ivy

There is a newer version: 0.5
Show newest version
package com.davidbracewell;

import com.davidbracewell.function.SerializableSupplier;
import lombok.NonNull;

import java.io.Serializable;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.function.Supplier;

/**
 * @author David B. Bracewell
 */
public final class Lazy implements Serializable {
  private static final long serialVersionUID = 1L;
  private volatile T lazyObject = null;
  private AtomicBoolean constructed = new AtomicBoolean(false);
  private volatile SerializableSupplier supplier;

  public Lazy(@NonNull SerializableSupplier supplier) {
    this.supplier = supplier;
  }

  public T get() {
    if (!constructed.get()) {
      return compute(supplier);
    }
    return lazyObject;
  }


  private synchronized T compute(Supplier supplier) {
    if (!constructed.get() && lazyObject == null) {
      lazyObject = supplier.get();
    }
    constructed.set(true);
    return lazyObject;
  }


}// END OF Lazy




© 2015 - 2025 Weber Informatics LLC | Privacy Policy