35 lines
799 B
Java
35 lines
799 B
Java
package org.warp.commonutils.concurrency.executor;
|
|
|
|
import java.util.concurrent.Callable;
|
|
import javax.annotation.Nonnull;
|
|
|
|
public final class PermitReleasingCallableDecorator<T> extends CallableDecorator<T> {
|
|
|
|
@Nonnull
|
|
private final QueueSizeUpdater queueSizeUpdater;
|
|
|
|
PermitReleasingCallableDecorator(@Nonnull final Callable<T> task,
|
|
@Nonnull final QueueSizeUpdater queueSizeUpdater) {
|
|
super(task);
|
|
this.queueSizeUpdater = queueSizeUpdater;
|
|
}
|
|
|
|
@Override
|
|
public T call() throws Exception {
|
|
try {
|
|
queueSizeUpdater.update(true);
|
|
} finally {
|
|
try {
|
|
return super.call();
|
|
} finally {
|
|
queueSizeUpdater.update(false);
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public final String toString() {
|
|
return String.format("%s[delegate='%s']", getClass().getSimpleName(), super.toString());
|
|
}
|
|
}
|