![JAR search and dependency download from the Maven repository](/logo.png)
io.github.pellse.concurrent.Lock Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of assembler Show documentation
Show all versions of assembler Show documentation
Small library allowing to efficiently assemble entities from querying/merging external datasources or aggregating microservices
package io.github.pellse.concurrent;
import reactor.core.publisher.Mono;
import java.util.function.Consumer;
import java.util.function.UnaryOperator;
import static io.github.pellse.util.ObjectUtils.doNothing;
import static reactor.core.publisher.Mono.fromRunnable;
sealed interface Lock {
Lock outerLock();
Consumer releaseLock();
default Mono> release() {
return fromRunnable(() -> releaseLock().accept(this));
}
default Lock unwrap() {
return this;
}
}
record ReadLock(Lock outerLock, Consumer releaseLock) implements Lock {
}
record WriteLock(Lock outerLock, Consumer releaseLock) implements Lock {
}
record NoopLock() implements Lock {
static NoopLock NOOP_LOCK = new NoopLock();
@Override
public Lock outerLock() {
return NOOP_LOCK;
}
@Override
public Consumer releaseLock() {
return doNothing();
}
}
record WrapperLock(Lock delegate, UnaryOperator> releaseLockWrapper) implements Lock {
@Override
public Lock outerLock() {
return delegate.outerLock();
}
@Override
public Consumer releaseLock() {
return releaseLockWrapper.apply(delegate.releaseLock());
}
@Override
public Lock unwrap() {
return delegate;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy