ConcurrentSkipListMap是一个有序的hashMap集合,看例子
底层原理是跳查表
当节点删除和节点添加同时操作就会报错,这是因为链表中删除数据是通过头节点的移动来操作的,头节点位置移动下,该节点就被删除了,故而新增节点时,节点已经删除,但是新的节点并不知道已经删除了,就报错了
解决方案如下
先进行软删除,在进行物理删除
有关实际方案化,即Mark节点方案、
标记a节点已经删除,即标记它的next节点,新造一个Mark节点,使得节点a的next指针执行Mark节点,需要新增节点b时,查询节点a后是不是有个Mark节点,将两个操作在一个CAS操作完成
跳查表
它的作用是解决无锁链表的插入和删除
无论是插入、删除,还是查找,都有相似的逻辑,都需要先定位到元素位置[b,n],然后判断b、n 是否已经被删除,如果是,则需要执行相应的删除清理逻辑。
标签:查表,删除,Mark,报错,简单,ConcurrentSkipListMap,节点 From: https://www.cnblogs.com/q202105271618/p/16986333.html