线程之间的通信,不关心什么时候唤醒的时候用阻塞队列
-
ArrayBlockingQueue:
- 入队操作
- add(E):在执行的时候,如果队列已满,则会抛出异常以终止插入操作;
- offer(E):在执行的时候,如果队列已满,返回false而不是抛出异常以终止插入操作(相对add更建议使用offer);
- offer(E,long,TimeUnit):在执行的时候,如果队列已满,则继续等待最长为给定的一段时间,看是否能够插入;
- put(E):在执行的时候,如果队列已满,则会等待队列有空位再插入。
- 出队
- remove(Object o):与add(E)对应;
- poll():与offer(E)对应;
- poll(long,TimeUnit):与offer(E,long,TimeUnit)对应;
- peek():与put(E)对应。
- 适用场景:
思考:出队和入队API一定要成对使用吗?不成对使用会怎么样?
- 入队操作
-
LinkedBlockingDeque:
- 入队:
- addFirst(E)和addLast(E):在队首插入和在队尾插入,队列为空则抛出异常终止操作;
- offerFirst(E)和offerLast(E):在队首插入和在
- 入队: