BlockingQueue的核心方法:
数据入队:
- void put(E e) :把Object加到BlockingQueue里,如果BlockQueue没有空间,则调用此方法的线程被阻断,直到BlockingQueue里面有空间再继续。
- boolean add(E e):把Object加到BlockingQueue里,如果BlockQueue没有空间,则抛出异常IllegalStateException: Queue full。
- boolean offer(E e):如果可能的话,将Object加到BlockingQueue里,如果BlockingQueue可以容纳,则返回true,否则返回false。(本方法不阻塞当前线程)
- boolean offer(E e, long timeout, TimeUnit unit):可以设定等待的时间,如果在指定的时间内,还不能往队列中加入,则返回失败。
数据出队:
- E take():取走BlockingQueue里排在首位的对象,若BlockingQueue为空,阻断进入等待状态直到BlockingQueue有新的数据被加入。
- E poll(long timeout, TimeUnit unit):从BlockingQueue取出一个队首的对象,如果在指定时间内,队列一旦有数据可取,则立即返回队列中的数据。否则直到时间超时还没有数据可取,返回失败。
- int drainTo():一次性从BlockingQueue获取所有可用的数据对象(还可以指定获取数据的个数)add到指定Collection。通过该方法,可以提升获取数据效率。不需要多次分批加锁或释放锁。