阻塞队列 与 非阻塞队列都有哪些
阻塞队列
- BlockingQueue下的都是阻塞队列
- ArrayBlockingQueue :有边界的阻塞队列,并且底层基于数组实现,初始化的时候就要指定其大小
- LinkedBlockingQueue:底层基于链表实现,当初始化指定大小的时候,那就是有界队列。如果不指定大小,那就是无界队列
- PriorityBlockingQueue:无边界的阻塞队列
- SynchronousQueue:该队列中只允许存在一个元素,当存在元素时,再来其他入队操作就会阻塞,直到该元素被消费空出来了为止
非阻塞队列
- ConcurrentLinkedQueue:基于链表结构的无界线程安全队列,通过CAS来保证线程安全
阻塞队列 与 非阻塞队列区别
- 阻塞队列:当队列满的时候在插入会阻塞,当丢列空的时候,再从丢列获取值也会阻塞
- 非阻塞队列:当队列满的时候,会不断的重试,直到有空闲后,加入队列;当队列为空时获取队列中数据,会返回null,并不断重复从队列获取数据,直到队列有了数据,然后取出。