Pregunta

JavaDoc el método java.util.concurrent.BlockingQueue.add (E e) 's dice lo siguiente:

añadir booleano (E e)

Inserta el elemento especificado en esta cola si es posible hacerlo inmediatamente sin violar la capacidad restricciones, volviendo al verdadero éxito y una lanza IllegalStateException Si no hay espacio actualmente disponible. Cuando se utiliza una capacidad restringida de colas, es generalmente es preferible usar oferta.

Mi pregunta es: ¿alguna vez volver falsa? si no, ¿por qué este método devuelve un booleano? Parece extraño para mí. ¿Cuál es la decisión de diseño detrás de esto?

Gracias por su conocimiento!
Manuel

¿Fue útil?

Solución

De ello se desprende del contrato de Collection.add(E e) (ya que es un BlockingQueue subtipo de Collection):

Si se niega una colección para agregar una elemento particular por cualquier razón aparte de que ya contiene el elemento, debe lanzar una excepción (en lugar de volver falso). Esto preserva el invariante que contiene una colección siempre elemento especificado después de esta llamada devoluciones.

Otros consejos

El detrás de la decisión es: fallar rápido. El IllegalStateException será lanzado, si la cola tiene una capacidad limitada. IllegalStateException es un RuntimeException. Así que si la excepción se tira, es probable que tenga una falla en su lógica de la aplicación o la lógica de la aplicación no es suficiente defensiva. O, para decirlo en otras palabras:. Si te gusta usar una cola limitada, su aplicación debe tratar de modo adecuado (uso offer lugar)

supongo que tiene un tipo de retorno booleano porque es un subinterface de Queue, que también tiene un método boolean add(E obj) (que a su vez se deriva de Collection). Algunas implementaciones Queue rechazan intentos de añadir objetos a la cola mediante la devolución falsa.

Por lo tanto, la respuesta a su pregunta es que las implementaciones de BlockingQueue nunca volverán falso.

El método devuelve un valor booleano porque anulaciones Collection#add(E e) .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top