面试官:BlockingQueue中有哪些方法,为什么这样设计?**
参考答案:
为了应对不同的业务场景,BlockingQueue 提供了4 组不同的方法用于插入、移除以及对队列中的元素进行检查。如果请求的操作不能得到立即执行的话,每组方法的表现是不同的。这些方法如下:
抛异常 | 特定值 | 阻塞 | 超时 | |
---|---|---|---|---|
插入 | add(e) | offer(e) | put(e) | offer(e, time, unit) |
移除 | remove() | poll() | take() | poll(time, unit) |
检查 | element() | peek() |
四组不同的行为方式含义如下:
抛异常:如果操作无法立即执行,则抛一个异常;
特定值:如果操作无法立即执行,则返回一个特定的值(一般是 true / false)。
阻塞:如果操作无法立即执行,则该方法调用将会发生阻塞,直到能够执行;
超时:如果操作无法立即执行,则该方法调用将会发生阻塞,直到能够执行。但等待时间不会超过给定值,并返回一个特定值以告知该操作是否成功(典型的是true / false)。