ConcurrentSkipListMap以及跳查表简单介绍

ConcurrentSkipListMap是一个有序的hashMap集合,看例子

 

 底层原理是跳查表

 当节点删除和节点添加同时操作就会报错,这是因为链表中删除数据是通过头节点的移动来操作的,头节点位置移动下,该节点就被删除了,故而新增节点时,节点已经删除,但是新的节点并不知道已经删除了,就报错了

解决方案如下

先进行软删除,在进行物理删除

有关实际方案化,即Mark节点方案、

标记a节点已经删除,即标记它的next节点,新造一个Mark节点,使得节点a的next指针执行Mark节点,需要新增节点b时,查询节点a后是不是有个Mark节点,将两个操作在一个CAS操作完成

跳查表

它的作用是解决无锁链表的插入和删除

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

无论是插入、删除,还是查找,都有相似的逻辑,都需要先定位到元素位置[b,n],然后判断b、n
是否已经被删除,如果是,则需要执行相应的删除清理逻辑。

 

posted @ 2022-12-21 22:01  不忘初心2021  阅读(99)  评论(0编辑  收藏  举报