The API says that the implementation of BlockingQueue are thread safe, but about the drainTo method, it says :
"This operation may be more efficient than repeatedly polling this queue. A failure encountered while attempting to add elements to collection c may result in elements being in neither, either or both collections when the associated exception is thrown. Attempts to drain a queue to itself result in IllegalArgumentException. Further, the behavior of this operation is undefined if the specified collection is modified while the operation is in progress."
I take it that the collection can be modified by another thread while the operation is in progress, so how is it thread-safe.