Esta pregunta se relaciona con una de mis preguntas anteriores ..El bloqueo de cola - Necesidad de más información
Allí la naturaleza de bloqueo se menciona como una ventaja.
Intenté desarrollar un código simple para demostrar la naturaleza de bloqueo, pero me quedé atascado. Intenté hacer un BlockingQueue
de tamaño 4 e intenté agregar 5 elementos y terminé con un java.lang.IllegalStateException
. ¿Alguien puede mostrarme un ejemplo de código para bloquear la naturaleza de BlockingQueue
?
public static void main(String[] args) {
BlockingQueue<String> bq = new LinkedBlockingQueue<String>(4);
try {
bq.offer("A");
bq.offer("B");
bq.offer("C");
bq.offer("D");
bq.offer("E");
System.out.println("1 = " + bq.take());
System.out.println("2 = " + bq.take());
System.out.println("3 = " + bq.take());
System.out.println("4 = " + bq.take());
System.out.println("5 = " + bq.take());
System.out.println("6 = " + bq.take());
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
He utilizado este segmento de código. En este caso, intento poner 5 elementos en una cola con tamaño 4. En este caso, se deben agregar 4 elementos (A, B, C, D) a la cola. Luego estoy llamando al método take()
mientras imprimo. ¿No debería insertarse "E" automáticamente en la cola cuando llamo al System.out.println("1 = " + bq.take());
? Porque se pone una ranura gratis?
Anteriormente utilicé Add + Poll. Pero en este momento estoy probando put + Take –
Hmm .... Entender ... Experimentar ahora :) –
¿Cómo debo especificar el tiempo de espera para el PUT()? –