/*
* Copyright (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com
* The software in this package is published under the terms of the CPAL v1.0
* license, a copy of which has been included with this distribution in the
* LICENSE.txt file.
*/
package org.mule.runtime.core.internal.lock;
import org.mule.runtime.api.lifecycle.Disposable;
import org.mule.runtime.api.lock.LockFactory;
import java.util.concurrent.TimeUnit;
/**
* Holds reference to all the obtained locks using {@link LockFactory} in order to release memory of no longer referenced locks.
*
*/
public interface LockGroup extends Disposable {
/*
* Gets a lock over the resource identified with lockId
*/
void lock(String lockId);
/*
* Releases lock over the resource identified with lockId
*/
void unlock(String lockId);
/**
* Tries to acquire the lock for a certain amount of time
*
* @param timeout the time in timeUnit to wait until the lock is acquired
* @param timeUnit the time unit of timeout
* @return true if the lock was successfully acquired, false otherwise
* @throws java.lang.InterruptedException if thread was interrupted during the lock acquisition
*/
boolean tryLock(String lockId, long timeout, TimeUnit timeUnit) throws InterruptedException;
boolean tryLock(String lockId);
void lockInterruptibly(String lockId) throws InterruptedException;
}