Java 并发编程之AbstractQueuedSynchronizer源码解析

  上一篇中,我们讲了 AbstractQueuedSynchronizer 的使用,链接为 Java 并发编程之AbstractQueuedSynchronizer解析 ,这一节中,我们将会从源码的角度解读:

 

一、双向链表:
  AbstractQueuedSynchronizer中使用了双向链表来作为同步器的队列,来保证FIFO。

  双向链表,首先会有一个header与tail的指针,这个不是节点,而是指针,header指向第一个节点,即Node1,所以 header == node1 。
 其次各个节点之间会有pre与next指针。


二、获取锁:
  下面将以Thread1获取到锁,Thread2接着获取锁,然后Thread2被阻塞,Thread1执行完成后,调用release()方法,接着Thread2获取到锁的例子来讲。
  首先看之前需要明确,compareAndSetState, compareAndSetHead(设置AbstractQueuedSynchronizer中的头结点

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值