• Java并发包下锁学习第二篇Java并发基础框架-队列同步器介绍


    Java并发包下锁学习第二篇队列同步器

    还记得在第一篇文章中,讲到的locks包下的类结果图吗?如下图:

    从图中,我们可以看到AbstractQueuedSynchronizer这个类很重要(在本文中,凯哥就用AQS来代替这个类)。我们先来了解这个类。对这个类了解之后,学习后面的会更容易了。

    本篇是《凯哥(凯哥Java:kagejava)并发编程学习》系列之《Lock系列》教程的第一篇:《Java并发包下锁学习第二篇:队列同步器》。

    本文主要内容:同步器介绍;同步器和锁的关系;AQS对象构成。

    一:队列同步器

    AQS是创建锁或者是同步组件的基础框架,其内部维护了一个FIFO队列来维护线程对资源获取的顺序。

    定义了若干同步状态获取和释放的方法来供自定义组件使用。如果获取状态(getStatus())、设置状态(setStatus())以及使用CAS设置当前线程状态来确保原子性的。这种设计思想是基于模板方法模式来设计的。使用者(或子类)需要继承同步器并重写方法。

    因为同步器支持独占式获取当前线程状态,也支持共享式的获取这个同步状态,所以这样就可以实现不同类型的组件了。如以独占式获取锁的ReentrantLock和以共享式获取的ReentrantReadWriteLock。需要说明的是:在一个同步组件中只能以一种方式获取锁。要么是独占式要么是共享式。

    同步器主要是以继承关系,子类实现父类抽象方法来管理自己类中线程状态的。从源码(后面学习中,我们将查看源码)中我们可以看出,推荐子类常常被定义为自定义组件的静态内部类来实现的。

    二:同步器和锁之间的关系

    同步器是锁(或者是其他同步组件)实现的关键;

    锁和同步器定义所面向的对象不同

    可以理解为锁是面向开发者(程序员)也即是锁的使用者而言的。锁定义了开发者在调用时候锁的交互接口(如独享方式的锁顶级接口lock),隐藏了锁具体实现的细节。如我们在使用Lock的时候,只需要lock.lock()获取锁,然后使用lock.unlock()释放锁就可以了。具体怎么获取锁,怎么释放锁的操作在内部实现的。使用者不用关心具体实现的细节。

    同步器是面向锁的实现类的。如Lock接口的实现类ReentrantLock其内部Sync内部类就是同步器的实现类。同步器简化了锁的实现方式。如对同步状态管理、多个线程排队管理以及线程之间等待与唤醒等这些底层的操作。

    可以说,锁和同步器很好的隔离了使用者和实现者所关注的领域。使用者只关心怎么获取/释放锁;实现者关心同步状态、排队等操作的实现。

    三:AQS对象构成

    为什么会写AQS的构成呢?我们想要彻底的了解独占式锁和共享锁离不开这个对象。所以咱们先来把这个对象搞清楚,然后再学习后面的就方便了。

    内部类:Node

    在上文中,我们说到,AQS内部是维护了一个FIFO的队列来保证获取锁的线程排队的。这个对象就是Node。在下一篇文章中,凯哥将带着大家一起解读源码,从源码中详细讲解Node内部类及链表是具体怎么工作的,怎么来维护队列实现FIFO的。欢迎继续学习下一篇文章

    内部类:CoditionObject

    操作线程之间的等待/通知模式的类。其功能和Object的wait()、wait(long time) 、notify()及notifyAll()这些方法类似。但又有不同。在后面文章中,凯哥也会讲解的。

    常用的API方法

    常用的方法。如独占式获取锁、获取同步状态、独占式释放锁;共享式模式下怎么获取锁、怎么获取同步状态及怎么释放锁;怎么阻塞线程及怎么唤醒线程。这些常用的方法。凯哥在后文中也会详细介绍的。

    在接下来的几篇文章中,凯哥将带着大家一起撸码AQS的源码一点一点分析。搞懂锁(或其他同步组件)的基础框架-同步器。欢迎大家接着学习后面文章。

  • 相关阅读:
    机器学习--多层感知机(2)
    机器学习-感知机实现(1)
    特殊的反转单链表算法(C++)
    openCV 2.4.13 iOS background_segm.hpp 'list' file not found
    UAF漏洞--iOS是越狱原理
    机器学习--线性回归的实践
    机器学习--梯度下降
    机器学习--基础知识复习(模式识别,成本函数)
    机器学习:从入门到沉迷之机器的思考方式
    整整十年 - Agent Framework for TypeScript 2.0
  • 原文地址:https://www.cnblogs.com/kaigejava/p/12603943.html
Copyright © 2020-2023  润新知