Actually, All of the BlockingQueues will have a blocking take() with FIFO ordering with the exception of: 1) DelayQueue where order is order of removal is defined by the longest time since the delay expired and 2) PriorityBlockingQueue (which you were using) which defines order of removal based on the natural ordering of the elements (or of a Comparator), not FIFO. ...