Moved to core-java-function module

Added concurrent tests
This commit is contained in:
maenolis
2023-11-17 22:44:42 +02:00
parent 2ed78462c8
commit 62c3d6bf32
8 changed files with 110 additions and 65 deletions
@@ -0,0 +1,16 @@
package com.baeldung.lazylambda;
import java.util.function.Supplier;
public class LambdaSupplier<T> {
protected final Supplier<T> expensiveData;
public LambdaSupplier(Supplier<T> expensiveData) {
this.expensiveData = expensiveData;
}
public T getData() {
return expensiveData.get();
}
}
@@ -0,0 +1,21 @@
package com.baeldung.lazylambda;
import java.util.function.Supplier;
public class LazyLambdaSupplier<T> extends LambdaSupplier<T> {
private T data;
public LazyLambdaSupplier(Supplier<T> expensiveData) {
super(expensiveData);
}
@Override
public T getData() {
if (data != null) {
return data;
}
return data = expensiveData.get();
}
}
@@ -0,0 +1,26 @@
package com.baeldung.lazylambda;
import java.util.concurrent.atomic.AtomicReference;
import java.util.function.Supplier;
public class LazyLambdaThreadSafeSupplier<T> extends LambdaSupplier<T> {
private final AtomicReference<T> data;
public LazyLambdaThreadSafeSupplier(Supplier<T> expensiveData) {
super(expensiveData);
data = new AtomicReference<>();
}
public T getData() {
if (data.get() == null) {
synchronized (data) {
if (data.get() == null) {
data.set(expensiveData.get());
}
}
}
return data.get();
}
}