项目中用到了 BlockingQueue,使用take()方法获取阻塞队列的头部元素,突然想起 队列还有个 poll 方法也是返回头部元素,特意查了查两个方法的区别,有个帖子总结的不错,特转载以记录。原贴地址:java Queue中 remove/poll/take, add/offer/put, element/peek区别
方法 | 作用 | 差别 |
---|---|---|
remove | 删除队列里面指定元素 | 有则删除返回 true,没有则返回 false |
poll | 移除并返问队列头部的元素 | 如果队列为空,则返回null。该方法是不阻塞的 |
take | 移除并返回队列头部的元素 | 如果队列为空则阻塞调用线程。如果队列为空则阻塞当前线程直到队列不为空然后返回元素,如果在阻塞的时候被其它线程设置了中断标志,则被阻塞线程会抛出 InterruptedException 异常而返回。 |
add | 增加一个元素 | 如果队列已满,则抛出一个IIIegaISlabEepeplian异常 |
offer | 添加一个元素并返回true | 如果队列已满,则返回false。如果 e 元素为 null 则抛出 NullPointerException 异常。该方法不阻塞 |
put | 添加一个元素并返回true | 如果队列已满则阻塞当前线程直到队列有空闲插入成功后返回 true,如果在阻塞的时候被其它线程设置了中断标志,则被阻塞线程会抛出 InterruptedException异常而返回,另外如果 e 元素为 null 则抛出 NullPointerException 异常 |
element | 返回队列头部的元素 | 如果队列为空,则抛出一个NoSuchElementException异常 |
peek | 返回队列头部的元素 | 如果队列为空,则返回null。该方法是不阻塞的 |