I have 2 threads – a producer and a consumer. The producer is expected to produce faster than the consumer can consume – although it is not always the case.

In order to make sure that the consumer consumes the messages in order (FIFO), I plan to use a queue. I am happy that Java 1.5 has introduced a bunch of Queue classes and interfaces into its group of Collection classes and interfaces.

However, there are so many queue implementation classes – which one should I use ?

Should I use a blocking queue ?
Is there a way to prevent the consumer from keep on checking on the contents of the queue ? Will the “blocking” feature address this ?
How do I make sure that my queue is accessed in a thread safe way ? Or is it already thread-safe by default ?