Java中的锁

Posted SqMax

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中的锁相关的知识,希望对你有一定的参考价值。

Lock接口

Lock是并发包中的基础接口。
Lock接口的实现基本都是通过聚合了一个同步器的子类来完成线程访问控制的。比如常见的ReentrantLock。

队列同步器

AbstractQueuedSynchronizer(简称AQS),是用来构建锁或者其它同步组件的基础框架。它使用了一个int成员变量表示同步状态,通过内置的FIFO队列来完成资源获取线程的排队工作。
同步器的主要使用方式是继承,子类通过继承同步器并实现它的抽象方法来管理同步状态。在抽象方法的实现过程中免不了要对同步状态进行更改,这时就需要使用同步器提供的3个方法(getState(),setState(int newState)和compareAndSetState(int expect,int update))来进行操作,因为它们能够保证状态的改变是安全的。

同步器是实现锁的关键,在锁的实现中聚合同步器,利用同步器实现锁的语义。可以这样理解二者的关系:锁是面向使用者的,它定义了使用者与锁交互的接口,隐藏了实现细节;同步器面向的是锁的实现者,它简化了锁的是实现方式,屏蔽了同步状态管理、线程的排队、等待与唤醒等底层操作。锁和同步器很好地隔离了使用者和实现者所需关注的领域。

ReentrantLock

读写锁(ReadWriteLock)

读写锁的实现分析(ReentrantReadWriteLock)

以上是关于Java中的锁的主要内容,如果未能解决你的问题,请参考以下文章

JAVA锁中的CAS

Objective-c 中的锁

带你快速了解Java锁中的公平锁与非公平锁

Java - 单例陷阱——双重检查锁中的指令重排问题

Python中的锁都具都有哪些?

获取synchronized锁中的阻塞队列中的线程是非公平的