En las implementaciones de BlockingQueue sabemos que los métodos put() y take() tienen naturaleza de bloqueo.

¿Cuál es su consejo para resolver su interminable estado de espera ? ¿Qué sucede si no hay más elementos para leer y se llama a take(), por ejemplo? Mi programa se ejecutará para siempre. Como resolverias esto? ¿Algun consejo?

0
Ana Maria 26 ago. 2020 a las 23:42

1 respuesta

La mejor respuesta

Utilice offer y poll métodos de BLockingQueue. Le permiten especificar un tiempo de espera para ambas operaciones.

// returns false if it could not push after 1 second
blockingQueue.offer(5, 1, TimeUnit.SECONDS);

/// returns null if no item was received after 1 second
blockingQueue.poll(1, TimeUnit.SECONDS);

Si no desea un tiempo de espera, puede utilizar los métodos sobrecargados que volverán inmediatamente con el mismo comportamiento de devolución (offer poll)

// returns false if it could not push
blockingQueue.offer(5);

/// returns null if no item was received
blockingQueue.poll();

Tenga cuidado al comprobar si el retorno de poll es nulo. Dependiendo de la estructura del proyecto, es posible que desee buscar en java Optional para ayudar con la verificación de nulos adecuada.

1
joshmeranda 26 ago. 2020 a las 21:47