并发JavaJava 并发
- 分类
- Java 并发
- 难度
- 未设置
- 来源数
- 1
- 更新时间
- 2026/03/28 21:25
答案
concurrentLinkedQueue对tail和head的更新是延迟更新的, 在插入时,如果tail指向的下一个节点不为null,则会执行更新操作,找到真正的尾节点,并且完成插入操作之后才会cas更新tail,当tail指向的下一个节点为空时,直接插入节点,不更新。 在删除时,如果head指向的下一个节点的item域为null,则会定位到真正的头节点,并执行删除,然后cas更新head,如果不为null,则直接执行删除,不更新和head。 这样做的目的主要是,如果有大量的一个插入操作,那么每次都要cas更新tail,会损耗性能,因此doug lea设计了每间隔一个元素再去更新,降低了cas的次数,提升了性能。
相关题目(5)
Java 并发并发JavaJava 并发锁
Java 并发并发JavaJava 并发
Java 并发并发JavaJava 并发
有哪些支持并发的集合?共源 1
Java 并发并发JavaJava 并发
Java 并发并发JavaJava 并发
元信息
审核状态: active
关联来源: 1
来源面经题(0)
这道题目前没有手动沉淀的面经题来源。
来源(1)
Java八股(并发).md
knowledge_noteQuestion 113: 说说ConcurrentLinkedQueue的HOPS延迟更新策略。
Source answer: concurrentLinkedQueue对tail和head的更新是延迟更新的, 在插入时,如果tail指向的下一个节点不为null,则会执行更新操作,找到真正的尾节点,并且完成插入操作之后才会cas更新tail,当tail指向的下一个节点为空时,直接插入节点,不更新。 在删除时,如果head指向的下一个节点的item域为null,则会定位到真正的头节点,并执行删除,然后cas更新head,如果不为null,则直接执行删除,不更新和head。 这样做的目的主要是,如果有大量的一个插入操作,那么每次都要cas更新tail,会损耗性能,因此doug lea设计了每间隔一个元素再去更新,降低了cas的次数,提升了性能。
Reviewed answer: ConcurrentLinkedQueue对head和tail采用延迟更新策略。插入时不一定每次都更新tail,而是在发现tail未指向真实尾节点时再修正;删除时也不一定每次都更新head,而是在需要时再定位真实头节点并CAS更新。这样可以减少CAS次数,提升并发性能。