package helpers; import java.util.concurrent.locks.Lock; public abstract class LockedRunnable implements Runnable { private final Lock lock; public LockedRunnable(Lock lock) { super(); this.lock = lock; } @Override public final void run() { lock.lock(); try { lockedRun(); } finally { lock.unlock(); } } protected abstract void lockedRun(); }