lectura Java's ConcurrentLinkedQueue Docs, me pregunto por qué no es posible para la aplicación para almacenar el tamaño:tamaño de ConcurrentLinkedQueue
Mira que, a diferencia de la mayoría de las colecciones, el método tamaño no es una operación de tiempo constante. Debido a la naturaleza asíncrona de estas colas, determinar el número actual de elementos requiere un recorrido de los elementos.
¿Dónde en the source es esta "naturaleza asincrónica"? Solo veo un ciclo while para reintentar enquear hasta que AtomicReferences coincida con los valores/referencias esperadas. ¿Por qué no es posible incrementar un size:AtomicInteger
después de ofrecer con éxito un valor a la cola?
Muchas gracias.
OK Entiendo que el orden en que se ejecutan los decrementos/incrementos no es determinista. Pero debería ser suficiente que un contador obtenga el tamaño aproximado de cola, ¿no es así? – hotzen
Finbarr, si la cola está administrando su propio tamaño, seguramente lo haría dentro de sus métodos (sincrónicos) de agregar/eliminar, ¿sí? Entonces, ¿cuándo sería el tamaño -1? – CPerkins
@CPerkins: debes leer la fuente antes de responder. ConcurrentLinkedQueue es "de espera". Es seguro para subprocesos sin métodos sincronizados. – CPerkins