Lock锁子类了解一下(一)

简介: 笔记

前言


回顾前面:

多线程三分钟就可以入个门了!

Thread源码剖析

多线程基础必要知识点!看了学习多线程事半功倍

Java锁机制了解一下

AQS简简单单过一遍

上一篇已经将Lock锁的基础AQS简单地过了一遍了,因此本篇主要是讲解Lock锁主要的两个子类:

  • ReentrantLock
  • ReentrantReadWriteLock

那么接下来我们就开始吧~


一、ReentrantLock锁


首先我们来看看ReentrantLock锁的顶部注释,来看看他的相关特性呗:

30.jpg

来总结一下要点吧:

  • 比synchronized更有伸缩性(灵活)
  • 支持公平锁(是相对公平的)
  • 使用时最标准用法是在try之前调用lock方法,在finally代码块释放锁
class X {
    private final ReentrantLock lock = new ReentrantLock();
    // ...
    public void m() { 
        lock.lock();  // block until condition holds
        try {
            // ... method body
        } finally {
            lock.unlock()
        }
    }
}


1.1内部类


首先我们可以看到有三个内部类:

31.png

这些内部类都是AQS的子类,这就印证了我们之前所说的:AQS是ReentrantLock的基础,AQS是构建锁、同步器的框架

  • 可以很清晰的看到,我们的ReentrantLock锁是支持公平锁和非公平锁的~


32.png

1.2构造方法


33.jpg


1.3非公平lock方法


尝试获取锁,获取失败的话就调用AQS的acquire(1)方法

34.jpg

acquire(1)方法我们在AQS时简单看过,其中tryAcquire()是子类来实现的

35.png

我们去看看tryAcquire()

36.jpg


1.4公平lock方法


公平的lock方法其实就多了一个状态条件

37.jpg

这个方法主要是判断当前线程是否位于CLH同步队列中的第一个。如果是则返回flase,否则返回true

38.jpg


1.5unlock方法


39.jpg

unlock方法也是在AQS中定义的:

40.jpg

去看看tryRelease(arg)是怎么实现的:

41.jpg


目录
相关文章
|
6月前
|
安全 Java
Synchronized和Lock的区别
Synchronized和Lock的区别
67 0
|
3月前
|
Java 开发者
揭秘!为什么大神都爱用Lock接口处理线程同步?
揭秘!为什么大神都爱用Lock接口处理线程同步?
77 5
|
Java
synchronized和lock的区别
synchronized和lock的区别
88 0
|
6月前
|
安全 Java API
synchronized关键字-监视器锁(monitor lock)
synchronized关键字-监视器锁(monitor lock)
|
Java
Lock 和 Synchronized的区别?
本章主要讲解了Lock 和 Synchronized的区别和知识点
54 0
|
Java
synchronized和Lock的区别
synchronized和Lock的区别
71 0
|
安全 Java
同步代码块、同步方法解决数据安全问题、线程安全的类及Lock锁
同步代码块、同步方法解决数据安全问题、线程安全的类及Lock锁的简单示例
112 1
同步代码块、同步方法解决数据安全问题、线程安全的类及Lock锁
|
安全 Java
Lock和Synchronized的区别
Lock和Synchronized的区别
Lock和Synchronized的区别
|
Java 程序员 API
java多线程——显式锁 vs 隐式锁
java多线程——显式锁 vs 隐式锁
java多线程——显式锁 vs 隐式锁