Java tutorial
/** * Copyright (c) 2016, All Contributors (see CONTRIBUTORS file) * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ package com.eventsourcing; import com.google.common.util.concurrent.Service; import java.util.function.Supplier; /** * Provides a mechanism for locks (see {@link Lock}) */ public interface LockProvider extends Service { /** * Instantiates a new lock and locks it. * * @param lock * @return new lock */ Lock lock(Object lock); default <T> T withLock(Object lock, Supplier<T> supplier) { Lock l = lock(lock); T t = supplier.get(); l.unlock(); return t; } }