Java 阻塞和同步队列
1. 队列和栈
队列:就像管道,排队在,先进先出(FIFO);
栈:就像桶,先进后出。
2. 阻塞队列(BlockingQueue)
A. 阻塞队列:由于队列有容量限制,故当队列元素已满时,新增加的元素必须等待,或当队列元素取出已空时,也会阻塞等待新的元素;
B. ArrayBlockingQueue API的使用
方法 | 抛出异常 | 返回特殊值 | 一直阻塞 | 超时退出 |
插入 存 | add -> java.lang.IllegalStateException | offer -> false | put | offer(e, time) |
移除 取 | remove - > java.util.NoSuchElementException | poll -> null | take | poll(e, time) |
检查队首 | element | peek -> null | - | - |
3. 同步队列(SynchronousQueue)
A. 同步队列:不存储元素,队列是空的,即每一个put操作,必须等待一个take,否则无法继续添加元素。
可参考:https://www.cnblogs.com/NathanYang/p/11276428.html
ConcurrentLinkedQueue(线程非阻塞),while(true)会一直占用cpu资源