多线程高并发开发

并发包之锁

2016-08-25  本文已影响21人  破晓追风

并发包锁结构

lock包结构

Lock

Lock是一个接口,定义了锁获取和释放的基本操作。

lock-api

AbstractQueuedSynchronizer

队列同步器,是用来构建锁或者其他同步组件的基础框架,它使用了一个int成员变量表示同步状态,通过内置的FIFO队列来完成资源获取线程的排队工作。
同步器是实现锁的关键,在锁的实现中聚和同步器,利用同步器实现锁的语义。锁是面向使用者的,它定义了使用者与锁交互的接口,隐藏了实现细节;同步器面向的是锁的实现者,它简化了锁的实现方式,屏蔽了同步状态管理、线程的排队、等待与唤醒等底层操作。

同步状态 等待队列

队列同步器方法

同步状态 可重写方法 模版方法

同步队列

节点数据结构

node数据结构

节点是构成同步队列(等待队列)的基础,同步器拥有首节点和尾节点,没有成功获取同步状态的线程将会成为节点加入到该队列的尾部。

独占获取

主要完成同步状态获取、节点构造、加入同步队列、在同步队列自旋。

独占释放

整个过程总结:在获取同步状态时,同步器维护一个同步队列,获取状态失败的线程都会被加入到队列中并在队列中进行自旋;移出队列(停止自旋)的条件是前驱节点为头节点且成功获取了同步状态。在释放同步状态时,同步器调用tryRelease方法释放同步状态,然后唤醒头节点的后继节点。

ReentrantLock

参考

《Java 并发编程的艺术》

上一篇下一篇

猜你喜欢

热点阅读