question: public int drainTo ( Collection < ? super E > c ) { int result = buffer . drainTo ( c ) ; if ( producer != null ) { producer . wakeUp ( ) ; } return result ; }
target:  Removes all available elements from this queue and adds them to the given collection. 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.