Java并发编程之锁机制之引导篇

该文章属于《Java并发编程》系列文章,若是想了解更多,请点击《Java并发编程之总目录》java

前言

在前面的文章中。咱们了解了volatile、了解了synchronized。如今咱们来了解一下Java SE 5以后新增长的Lock接口(以及相关实现类)实现的锁功能。在阅读该系列文章以前,但愿你已经掌握了volatile原理及CAS操做原理。若是你对上述提到的两个知识点不是很熟悉或者了解。那么建议从整个Java内存模型的设计及相关知识点开始了解,欲知详情,请点击--->《Java并发编程之总目录》。编程

concurrent包的设计

要了解Java为咱们提供的基于Lock接口(以及相关实现类)实现的锁功能,咱们首先要看一下整个concurrent包下的设计。具体设计以下所示: 微信

current.png
在上图中,咱们大体能够看出courrent包下的总体结构。整个包大体分为了三层。

  • 高层:Lock、同步器、阻塞队列等。
  • 中层:AQS(AbstractQueuedSynchronizer)、非阻塞数据结构、原子变量类。
  • 底层:volatile变量的读/写、CAS操做。

其中每一个层中的依赖关系也很明显,AQS,非阻塞数据结构和原子变量类(java.util.concurrent.atomic包中的类),都是基于底层实现,而高层类又依赖中层这些基础类。特别须要注意的是于Lock接口(以及相关实现类)相关的锁功能在整个高层中起着很是重要的重要。虽然没有直接在图中表述Lock接口在高层中的关系,可是在高层中咱们所罗列的同步器、阻塞队列、并发容器等,或多或少都依赖或使用其Lock接口(以及相关实现类)实现的锁功能。数据结构

因此了解Lock接口以及相关实现类,对咱们认识整个Java并发的机制与设计起着尤其重要的做用。多线程

Lock接口(以及相关实现类)UML类图

总所周知锁是用来控制多个线程访问共享资源的方式,通常来讲,一个锁就可以防止多个线程同时访问共享资源(可是有些锁能够容许多线程并发的访问共享资源,好比咱们后期将会讲解的读写锁),在Lock接口出现以前,Java程序是靠synchronized关键字来实现锁功能的,而Java SE 5以后,并发包中新增了Lock接口以及相关实现类,来实现锁的功能。 关于 Lock接口(以及相关实现类)的UML类图,具体以下所示:并发

继承关系图

关于上图中涉及到的类,我都简单的描述了出来,并无详细的将每一个类中的方法描述出来。由于我以为前期你们只要了解其中的使用关系就好了。后续的相关文章会对其中涉及到的类及使用会有具体的描述。(若是在手机端阅览的同窗,图片有可能不是很清楚,建议直接在PC端阅读工具

从上图中咱们发现整个Lock接口以及相关实现类关系还算比较复杂,因此准备分为如下几个部分来介绍:post

相信你们看完这系列文章以后,对你们会有所帮助。喜欢个人小伙伴们,不要加我微信啊,给我点赞就好了。你的支持就是对我最大的鼓励。爱你哟~~~atom

相关文章
相关标签/搜索