Desafío: BlockingQueue
Tarea
Solo será necesario implementar algunos métodos de BlockingQueue para comprender mejor cómo funciona la colección y para afianzar el material aprendido.
Es necesario ir a BlockingQueueueImpl, donde en la propia clase habrá 2 métodos no implementados que se deben completar. No es necesario idear una solución compleja, simplemente se debe replicar la funcionalidad de una BlockingQueueue estándar.
También se dispone de una clase Main en la que se debe probar la BlockingQueueueImpl para verificar su correcto funcionamiento.
Puede comprobarlo añadiendo más de 10 elementos a la queue (o más que el limit que inicializó en el constructor) y el siguiente elemento tendrá que esperar hasta que haya menos elementos en la cola que el límite y solo entonces podrá escribir el siguiente elemento.
put() - método sincronizado que añade elementos a la cola si no se supera el límite de la cola; si se supera, pausa la cola
take()- método sincronizado que toma un elemento de la cola, lo devuelve y lo elimina; si la cola está vacía, la pausa
Consejo de solución
Para implementar put() debe comprobar si la cola está llena, es decir, si no es igual al límite y, si lo está, pausar el hilo. Si no está llena, debe comprobar si la cola está vacía (isEmpty()) y, si el hilo está vacío, llamar al método que libera todos los hilos (notifyAll()). Luego, añada el elemento a la queue.
Para implementar take() debe comprobar si la cola está vacía; si está vacía, pause el hilo (porque no hay nada para leer); si la cola no está vacía, realice otra comprobación para la integridad de la lista y, si el tamaño de la lista es igual al limit, entonces libere todos los hilos y devuelva el primer elemento de la cola (el que fue añadido antes que los demás).
Métodos que necesitarás ejecutar
wait()- pausa el hilo;notifyAll()- despierta todos los hilos que están en pausa;queue.isEmpty()- verifica si la cola está vacía (true - la cola está vacía).
Después de implementar estos métodos y probar en la clase Main, dirígete a /src/test/java/BlockingQueueueImplTest.java y ejecuta todas las pruebas.
Si se ejecutan correctamente, ¡felicitaciones, hiciste todo bien! Si no, o tienes la solución incorrecta o has modificado algo que no debías cambiar.
Intenta también resolver el problema por tu cuenta, pero si no lo logras y quieres conocer la respuesta, hay un enlace a la solución. Solo no copies el código, sino que intenta comprenderlo.
¡Gracias por tus comentarios!
Pregunte a AI
Pregunte a AI
Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla
Awesome!
Completion rate improved to 3.33
Desafío: BlockingQueue
Desliza para mostrar el menú
Tarea
Solo será necesario implementar algunos métodos de BlockingQueue para comprender mejor cómo funciona la colección y para afianzar el material aprendido.
Es necesario ir a BlockingQueueueImpl, donde en la propia clase habrá 2 métodos no implementados que se deben completar. No es necesario idear una solución compleja, simplemente se debe replicar la funcionalidad de una BlockingQueueue estándar.
También se dispone de una clase Main en la que se debe probar la BlockingQueueueImpl para verificar su correcto funcionamiento.
Puede comprobarlo añadiendo más de 10 elementos a la queue (o más que el limit que inicializó en el constructor) y el siguiente elemento tendrá que esperar hasta que haya menos elementos en la cola que el límite y solo entonces podrá escribir el siguiente elemento.
put() - método sincronizado que añade elementos a la cola si no se supera el límite de la cola; si se supera, pausa la cola
take()- método sincronizado que toma un elemento de la cola, lo devuelve y lo elimina; si la cola está vacía, la pausa
Consejo de solución
Para implementar put() debe comprobar si la cola está llena, es decir, si no es igual al límite y, si lo está, pausar el hilo. Si no está llena, debe comprobar si la cola está vacía (isEmpty()) y, si el hilo está vacío, llamar al método que libera todos los hilos (notifyAll()). Luego, añada el elemento a la queue.
Para implementar take() debe comprobar si la cola está vacía; si está vacía, pause el hilo (porque no hay nada para leer); si la cola no está vacía, realice otra comprobación para la integridad de la lista y, si el tamaño de la lista es igual al limit, entonces libere todos los hilos y devuelva el primer elemento de la cola (el que fue añadido antes que los demás).
Métodos que necesitarás ejecutar
wait()- pausa el hilo;notifyAll()- despierta todos los hilos que están en pausa;queue.isEmpty()- verifica si la cola está vacía (true - la cola está vacía).
Después de implementar estos métodos y probar en la clase Main, dirígete a /src/test/java/BlockingQueueueImplTest.java y ejecuta todas las pruebas.
Si se ejecutan correctamente, ¡felicitaciones, hiciste todo bien! Si no, o tienes la solución incorrecta o has modificado algo que no debías cambiar.
Intenta también resolver el problema por tu cuenta, pero si no lo logras y quieres conocer la respuesta, hay un enlace a la solución. Solo no copies el código, sino que intenta comprenderlo.
¡Gracias por tus comentarios!