Which concurrent Queue implementation should I use in Java?

Viewed 126431

From the JavaDocs:

  • A ConcurrentLinkedQueue is an appropriate choice when many threads will share access to a common collection. This queue does not permit null elements.
  • ArrayBlockingQueue is a classic "bounded buffer", in which a fixed-sized array holds elements inserted by producers and extracted by consumers. This class supports an optional fairness policy for ordering waiting producer and consumer threads
  • LinkedBlockingQueue typically have higher throughput than array-based queues but less predictable performance in most concurrent applications.

I have 2 scenarios, one requires the queue to support many producers (threads using it) with one consumer and the other is the other way around.

I do not understand which implementation to use. Can somebody explain what the differences are?

Also, what is the 'optional fairness policy' in the ArrayBlockingQueue?

6 Answers
Related