This week's book giveaway is in the OCAJP 8 forum. We're giving away four copies of OCA Java SE 8 Programmer I Study Guide and have Edward Finegan & Robert Liguori on-line! See this thread for details.
If you need to choose the best way to do something, use PriorityQueue. The infamous traveling salesman problem benefits from a priority queue. In that problem the have to find the best route to a destination, and there are many possibilities. A LinkedList is good if your doing many insertions or deletions.
There probably isn't a "best" implementation of anything, but have a look at the java.util.Queue interface, where there is a list of implementing classes. Some of them may have instructions about how to make a Queue thread-safe. There are comments about blocking queues in Queue, too.