BlockingQueue is an interface that extends the standard Queue interface with methods that are suitable for use by multithread applications. Any implementation of this interface provides methods that allow different threads to put an element into the queue, pull elements off the queue, and wait for elements that are in the queue.
When there is a new element to be stored in the queue, you can add() it, offer() it, or put() it. These are the names of the methods that store elements and they do the same thing, just a bit differently. The add() method throws an exception if the queue is full and there is no room for the element. The offer() method does not throw an exception but returns either true or false, depending on whether the operation is successful. If it can store the element in the queue, it returns true. There is also a version of offer() that specifies a timeout...