package net.flibusta.concurrent.impl;
import net.flibusta.concurrent.LockManager;
import org.apache.log4j.Logger;
import java.util.HashSet;
import java.util.Set;
public class HashLockManager implements LockManager {
Logger logger = org.apache.log4j.Logger.getLogger(HashLockManager.class);
private final Set<String> locks = new HashSet<String>();
@Override
public void lock(String id) throws InterruptedException {
synchronized (locks) {
while (locks.contains(id)) {
logger.debug("Waiting lock " + id);
locks.wait();
logger.debug("Got lock " + id);
}
locks.add(id);
}
}
@Override
public void unlock(String id) {
synchronized (locks) {
locks.remove(id);
locks.notify();
}
}
}