LinkedBlockingQueue总结【1】无界阻塞队列,可以指定容量,默认为 Integer.MAX_VALUE , 先进先出,存取互不干扰
【2】数据结构:链表(可以指定容量,默认为 Integer.MAX_VALUE , 内部类Node存储元素)
【3】锁分离:存取互不干扰,存取操作的是不同的Node对象(takeLock【取Node节点保证前驱后继不乱】 , putLock【存Node节点保证前驱后继不乱】,删除时则两个锁一起加)【这是最大的亮点】
【4】阻塞对象(notEmpty【出队:队列count=0,无元素可取时,阻塞在该对象上】 , notFull【入队:队列count=capacity,放不进元素时,阻塞在该对象上】)
【5】入队,从队尾入队,由last指针记录 。
【6】出队,从队首出队,由head指针记录 。
【7】线程池中采用LinkedBlockingQueue而不采用ArrayBlockingQueue的原因便是因为锁分离带来了性能的提升 , 大大提高队列的吞吐量 。
【LinkedBlockingQueue详解】
推荐阅读
- 详解ROMA Connect API 流控实现技术
- Go_Goroutine详解
- Go_Channel详解
- Docker | 容器数据卷详解
- MyBatis之ResultMap的association和collection标签详解
- Future详解
- Go的网络编程详解
- gorm中的关联操作详解
- Go中的闭包、递归
- liunx之expect操作详解