博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java并发编程之锁机制之引导篇
阅读量:5992 次
发布时间:2019-06-20

本文共 1219 字,大约阅读时间需要 4 分钟。

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

前言

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

concurrent包的设计

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

在上图中,我们大致可以看出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接口以及相关实现类关系还算比较复杂,所以准备分为以下几个部分来介绍:

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

转载地址:http://mkxlx.baihongyu.com/

你可能感兴趣的文章
js面向对象精要-理解对象
查看>>
微信小程序绘图小结——Base64图片绘制
查看>>
一个小程序开发者的技术之路 | 2018掘金年度征文
查看>>
Android SharedPreferences 实现原理解析
查看>>
java基础LinkedHashMap原理
查看>>
本人整理的前端规范
查看>>
oracle数据库服务器(内存减小导致Oracle启动不了,解决方法)
查看>>
Unknown system variable 'language'
查看>>
linux远程桌面vnc服务配置详细教程
查看>>
怎么能让while循环变成死循环,无限的输出
查看>>
查看LINUX操作系统相关信息命令
查看>>
Python学习:paramiko模块(1)SSH登陆
查看>>
Windows Thin PC中文化
查看>>
javascript 实现垂直展开压缩动画
查看>>
SQL Server中的Merge关键字
查看>>
对于公司组建Hadoop基础框架的推荐分析
查看>>
我的友情链接
查看>>
c# 构造函数初探
查看>>
VMware vSphere6.0(一)----环境介绍
查看>>
xDAIS VISA API
查看>>