java使用交替锁实现线程安全的链表

2018-02-19  本文已影响105人  每天学点编程

请关注我的微信公众号

个人微信公众号

技术交流群 (仅作技术交流):642646237

​请关注我的头条号:

如何实现线程安全的链表

多线程环境下向链表中安全插入节点的方法:

  1. 锁住整个链表。
  2. 使用交替锁。只锁住链表的一部分,链表没有被锁住的部分自由访问。

交替锁如何实现安全的链表

插入新的链表节点时,需要将待插入位置两边的节点加锁。

首先锁住链表的前两个节点。
如果这两节点之间不是待插入位置,那么就解锁第一个节点,并锁住第三个节点。
如果被锁住的两节点之间仍不是待插入位置,就解锁第二个节点,并锁住第四个节点。
以此类推,直到找到待插入位置并插入新的节点,最后解锁两边的节点。

交替锁实现安全的链表 代码




这种方案可以让多个线程并发地进行链表插入操作,还能让其他的链表操作安全地并发。

交替锁实现的链表可以并发地执行统计节点数操作

链表统计操作和插入操作是否违反“全局顺序”规则?

不违反!
size()方法从不持有多把锁——其在某一时间并不持有一把以上的锁。

上一篇 下一篇

猜你喜欢

热点阅读