Estoy repasando para mi próximo examen y estoy haciendo los ejercicios del examen que suspendí. Este en concreto se me está resistiendo:
Se dispone de una aplicación web de juegos on-line. Para evitar que la aplicación web se sature, hay un límite máximo de partidas simultáneas, definido mediante la constante MAX_PARTIDAS. En la implementación actual, cuando se recibe una petición para crear una nueva partida, se comprueba si ya se ha alcanzado el máximo de partidas actuales. En ese caso, se devuelve un error al cliente. Nos han pedido que modifiquemos la implementación actual para evitar en la medida de lo posible los
errores enviados a los clientes. En concreto, nos piden que en el caso en que el número de partidas sea el máximo, en vez de devolver un error de forma inmediata, el hilo quede bloqueado durante un tiempo a la espera de que una de las partidas actuales finalice. Si no finaliza ninguna partida en el
tiempo indicado, entonces se devolverá el error. Pero en caso de que finalice una partida antes, entonces se devolverá correctamente al cliente.
public class GestorMaxPartidas {
public static final int MAX_PARTIDAS = 10;
// Atributos necesarios
public GestorMaxPartidas() {
}
// Este método será invocado cuando se quiera usar crear una nueva partida.
// Devolverá true si se puede crear una partida (no se ha alcanzado el
// máximo).
// En caso de que se haya alcanzado el máximo de partidas, se bloqueará
// hasta que
// alguna partida finalice o bien se supere el tiempo de espera
// (waitTimeMillis).
// Si alguna partida finaliza antes de que se supere el tiempo, se devolverá
// true.
// En caso contrario, se devolverá false.
public boolean iniciarNuevaPartida(long waitTimeMillis) {
}
// Este método será invocado cuando una partida previamente iniciada
// finalice.
public void finalizarPartida() {
}
}
Se pide completar la clase anterior: incluyendo los atributos necesarios y añadiendo la implementación adecuada en los métodos y el constructor de forma que se comporte como se ha indicado previamente. No es necesario implementar ninguna clase adicional, únicamente completar la clase GestorMaxPartidas.
Lo he intentado de muchas formas (usando monitores, estructuras de sincronización de alto nivel, estructuras sincronizadas) pero nada, no consigo de ninguna forma "enfocar" el ejercicio. Si a alguien se le ilumina la bombilla estaré agradecido xD