package org.warp.commonutils.concurrency.executor; import org.jetbrains.annotations.NotNull; public final class PermitReleasingRunnableDecorator extends RunnableDecorator { @NotNull private final QueueSizeUpdater queueSizeUpdater; PermitReleasingRunnableDecorator(@NotNull final Runnable task, @NotNull final QueueSizeUpdater queueSizeUpdater) { super(task); this.queueSizeUpdater = queueSizeUpdater; } @Override public void run() { try { queueSizeUpdater.update(true); } finally { try { super.run(); } finally { queueSizeUpdater.update(false); } } } @Override public final String toString() { return String.format("%s[delegate='%s']", getClass().getSimpleName(), super.toString()); } }