zoukankan      html  css  js  c++  java
  • Java并发包下锁学习第一篇:介绍及学习安排

    Java并发包下锁学习第一篇:介绍及学习安排

       在Java并发编程中,实现锁的方式有两种,分别是:可以使用同步锁(synchronized关键字的锁),还有lock接口下的锁。从今天起,凯哥将带领大家一起豪华参观(详细讲解)在Java并发包(JUC)下locks包下的体系结构。

    在这个系列中,我们将会学习并发包下锁实现的原理(我们将跟着源码来分析)、什么是可重入锁、公平锁和非公平锁怎么定义的、为什么synchronized关键字的锁和ReentrantLock默认会选择非公平锁?读写锁和独占锁的比较、跟着源码我们来分析读写锁等和锁相关的知识。学完这个系列教程后,大家将对并发锁有更新的理解,欢迎大家一起学习。

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

    本文主要内容:java中锁定义及在jdk5以后的并发包(JUC)下锁相关的类及类关系图;怎么学习JUC下锁

    凯哥讲解一般步骤:先举生活中的例子,然后从例子中总结,然后在用代码演示。经过这三个步骤来加深大家的印象。

    一:锁的理解

    在多线程场景下,多个线程要操作同一个资源,这个被竞争的资源就是共享资源。当同时有多个线程一起竞争共享资源的时候,如果一个线程竞争到了这个资源,就需要使用一个手段或者是技术通知其他线程,这个资源已经被占用着,其他线程需要等待才可以。基于这种思想,在我们现实生活中,如何让其他人知道某个东西是你的呢?贴上你的名字、打上标识或者是用一把锁锁着。这样别人就竞争不了了。锁就是这个通知其他人(或线程)的一种手段。所以,在多线程环境下,就是用了这种技术来实现对共享资源的控制。

    二:JUC下locks包下体系

    我们先来看看JUC下的locks包都有哪些类或接口。

    JUC包下锁相关的类:

    上图中类之间的关系可以简单如下图:

    锁之间类图关系:

    更简单明了的如下图:

    三:类介绍

    AbstractOwnableSynchronizer:队列同步器。

    该类是用来构建锁或者其他同步组件的基础框架的顶级抽象类。有两个子类

    AbstractQueuedLongSynchronizer:是AbstractQueuedSynchronizer类的另一个版本类。区别就在原AbstractQueuedLongSynchronizer类里面状态码使用Long类型的而非int类型的。凯哥在以后文章中将详细介绍AbstractQueuedSynchronizer类的。

    AbstractQueuedSynchronizer:队列同步器。

    使用比较多的。是构建锁或者其他同步组建的基础框架。其通过一个int成员变量来表示同步状态的。通过内部类Node来实现FIFO(first-in-first-out:即先进先出)的队列来完成获取资源线程排队的操作。

    Lock:

    排他锁的顶级接口。

    RenntrantLock:

    Lock的实现类。可重入锁。内部有公平锁和非公平锁两个内部类。

    ReadWriteLock:

    读写锁的顶级接口

    ReentrantReadWriteLock:

    读写锁的子类。内部有读锁和写锁两个内部类来控制着读写分离操作的。

    LockSupport:

    当要执行阻塞或者是唤醒一个线程的时候,都会使用到lockSupport这个工具类来实现的。

    Condition:

    监视对象。与lock对象配合使用来实现等待/通知模式

    四:学习安排

    通过上面介绍我们对并发包下的locks包有所了解了。在接下来的学习中,我们将会按照上面类介绍的顺序来学习。先学习同步队列,跟着源码来分析主要API;在学习排他锁;然后再学习读写锁;最后学习后面两个类。

  • 相关阅读:
    P4146 序列终结者(Splay树)
    P2617 Dynamic Rankings(树套树)
    P4168 [Violet]蒲公英(分块魔术)
    P3649[APIO2014]回文串(回文自动机)
    [IOI2011]Race(树上启发式合并)
    CentOS 7安装 .net core 环境 官网说明地址
    宝塔 Linux 面板php.ini文件在哪个目录
    KPPW部署一直提示No input file specified的Apache伪静态设置
    【分享】 MPSoC的VCU超频
    Versal AIE 上手尝鲜 2 -- Linux例程
  • 原文地址:https://www.cnblogs.com/kaigejava/p/12596898.html
Copyright © 2011-2022 走看看