import java.util.HashSet;

public class GerenciadorSincronizacao {

    private java.util.HashSet chaves;

    public GerenciadorSincronizacao() {
        chaves = new HashSet();
    }

    public synchronized void iniciarSincronizacao(Object obj) {
        try {
            while (!chaves.add(obj)) {
                wait();
            }
        }
        catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    public synchronized void finalizarSincronizacao(Object obj) {
        try {
            if (!chaves.remove(obj)) {
                throw new RuntimeException();
            }
        }
        catch (Exception ex) {
            ex.printStackTrace();
        }
        finally {
            try {
                notifyAll();
            }
            catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}
