JAVA
文章平均质量分 84
JAVA语言相关
pan_mlpan
没有伞的孩子要努力奔跑
展开
-
Hibernate、JPA、SpringDataJPA 介绍
Hibernate、JPA、SpringDataJPA 介绍在Java开发中,我们会用到很多与数据库交互的框架,常见的为ORM框架, 下面介绍一下Hibernate、JPA、SpringDataJPA 这几种框架/技术ORMORM(Object-Relational Mapping) 表示对象关系映射。在面向对象的软件开发中,通过ORM,就可以把对象映射到关系型数据库中。当实现一个应用程序时(不使用O/R Mapping),我们可能会写特别多数据访问层的代码,从数据库保存数据、修改数据、删除数据,而原创 2022-05-27 11:17:29 · 5175 阅读 · 0 评论 -
Java - 反射及其使用
Java - 反射及其使用Java 开发人员必须要知道的一个知识,就是反射,在看很多底层源码的时候或多或少都会涉及一些,下面来介绍一下前言Java 一种经典的面向对象开发语言,对象先声明后使用,而一个变量又分为 编译型类型 与 运行时类型编译时类型 是由声明该变量时使用的类型决定运行时类型 由实际赋给该变量的对象决定若编译时类型和运行时类型不一致,也就是我们所谓的 多态。因为子类其实是一种特殊的父类,因此java允许把一个子类对象直接赋值给一个父类引用变量,无须任何类型转换,或者被称为向上转原创 2022-05-25 20:55:51 · 4932 阅读 · 0 评论 -
Spring 自定义 Converter
Spring 自定义 Converter在上节 Spring 之请求参数解析原理 中有说到关于参数的类型转换是依靠 WebDataBinder(数据绑定器,进行数据绑定的工作)中的 conversionService(负责数据类型的转换和格式化工作 )中的各个converters (负责各种 数据类型的转换 工作)来处理的,这节来说说它~关于Spring的核心元素 DispatchServlet 请查看:Spring 原理之 DispatchServlet 原理关于 Spring 之请求参数原创 2022-05-23 19:08:01 · 941 阅读 · 0 评论 -
Spring 自定义 ArgumentResolver
Spring 自定义 ArgumentResolver在 Spring 之请求参数解析原理(实体类传参封装解析) 这篇博客中说到,后端接口传递参数的解析就是对参数进行逐一处理,找到可以处理该参数的 resolver,然后调用核心 resolveArgument 方法进行参数解析Resolver 介绍对于后端接口传递参数,逐一判断 this.resolvers.supportsParameter(parameter) 是否为 true,默认的 this.resolvers 列表为下面的26个,分别对不原创 2022-05-23 19:03:06 · 833 阅读 · 0 评论 -
Spring 之请求参数解析原理(实体类传参封装解析)
Spring 之请求参数解析原理(实体类传参解析)之前实习的时候有做一个需要反射执行类中方法的组件,对该方法支持的参数类型的映射与解析当时考虑了很多参数类型, 参数类型有 普通类型 数组 实体类 泛型 等更多组合的复杂类型,对于反射执行的方法若重载方法很多,其实是需要确定参数类型来找到对应执行的方法那么在Spring项目中,对于传参,其实也是可以直接以实体类的形式传参,就很好奇,其是怎么做的?所以看了看源码,分析记录一下关于Spring的核心元素 DispatchServlet 请查看原创 2022-05-23 17:43:48 · 3020 阅读 · 1 评论 -
Spring 请求参数类型转换解析(@DateTimeFormat 、自定义Convert)
Spring 请求参数类型转换解析(@DateTimeFormat 、自定义Convert)在上节 Spring 之请求参数解析原理 中有说到关于参数的类型转换是依靠 WebDataBinder(数据绑定器,进行数据绑定的工作)中的 conversionService(负责数据类型的转换和格式化工作 )中的各个converters (负责各种 数据类型的转换 工作)来处理的,这节来说说它~关于Spring的核心元素 DispatchServlet 请查看:Spring 原理之 Dispatc原创 2022-05-23 17:40:33 · 1911 阅读 · 0 评论 -
Java - HuTool 使用 ReflectUtil、ClassUtil等工具类(二)
Java - HuTool 使用 ReflectUtil、ClassUtil等工具类(二)本篇主要介绍 HuTool工具, 其是 java工具类,对于一些静态方法进行封装,虽然很小,但很全,里面拥有平时我们会用到的工具类,就无需我们自己去封装了以前我还自己去封装,emmm,我真的太傻了~,但是自己封装也不是不好,但是学会站在巨人的肩膀上,也非常有必要下面就简单介绍一下 HuTool工具 与 其简单使用相关链接:官网 / 备用官网API 总览HuTool 工具介绍Hutool 是一个小原创 2022-05-16 22:05:26 · 3454 阅读 · 1 评论 -
JAVA - Quartz 定时任务_启动原理
JAVA - Quarz 定时任务_启动原理前言在开发过程中,我们会用定时任务来执行一些操作,例如定时去捞取流水重试业务、定时去消息中间件获取消息等等相关需求简单的定时任务实现可以借助Spring提供的 @Scheduled 注解 详细看 Spring 原理之 Scheduled如果涉及到 定时任务的动态管理就需要使用到其他技术,下面介绍一下QuartzQuartz是一个开源的任务日程管理系统, 由 OpenSymphony开源,同时它是一个功能丰富的任务调用系统,可创建简单或者复杂的几十、几原创 2022-05-09 16:05:29 · 2160 阅读 · 1 评论 -
SpringBoot 接入支付宝 SDK(支付宝支付你会吗?)
SpringBoot 接入支付宝SDK最近有好奇网页/手机扫码付款支付宝如何实现的?然后去学习了一下, 发现还是很简单的~,记录一下吧(下次就直接拿来用了)前言我在学习的时候,发现与支付宝SDK对接,最麻烦的却是接入前的一些准备工作,但是好在官网其实很详细了大家可以去 网页 & 移动接入 详细的进行接入前的准备工作(电脑网站支付 手机网站支付 网页支付)具体就是几个步骤:(详细的配置这里就不说明了,都很清晰)创建应用在 创建应用 中创建应用并提交审核,审核通过后会生成应用 唯原创 2022-05-05 19:43:12 · 2703 阅读 · 0 评论 -
org.hibernate.engine.loading.internal.CollectionLoadContext@6b6f68cdrs=com.alibaba.druid.pool.Druid?
org.hibernate.engine.loading.internal.CollectionLoadContext@6b6f68cdrs=com.alibaba.druid.pool.Druid?(栈溢出、空指针问题)问题描述今天在项目中同时使用 lombok 中的 @Data 注解与 hibernate 时出现了一个bug在运行的时候报错 org.hibernate.engine.loading.internal.CollectionLoadContext@6b6f68cdrs=com.a原创 2022-05-04 17:14:03 · 996 阅读 · 0 评论 -
Swagger 介绍(Swagger 与 SpringBoot 集成)
Swagger 介绍(Swagger 与 SpringBoot 集成)最近我们实验室老师要我整理接口文档,我是用javadoc自动生成的(说前端人看不懂),没办法,只能换了~本篇主要介绍 Swagger,一款围绕OpeanAPI规范构建的开源工具,便于构建和使用REST API下面就介绍一下在Java中,SpringBoot集成Swagger的一些使用与介绍前言Swagger 是什么?其是一款围绕OpeanAPI规范构建的开源工具,便于构建和使用REST API,主要Swagger工具有:原创 2022-04-29 14:22:01 · 1120 阅读 · 0 评论 -
Java - log4jdbc 使用与原理介绍(SQL/日志监控)
Java - log4jdbc(SQL/日志监控)前言之前老板让实现一个日志服务器,然而我们都不知道已经有现成的日志监控包直接使用(没有站在巨人肩膀上干活,害)本篇主要介绍 log4jdbc,在进行系统开发时,我们一般会查看执行的SQL/了解SQL执行时间,这个时候其实可以代码在sql执行前后计算时间,框架执行sql的时候进行sql输出,其实也是可以实现的,但是有更简单的干嘛不用呢~,学习了 log4jdbc 然后来记录一下log4jdbc介绍1、简介log4jdbc 是一个 Java JDB原创 2022-04-28 16:37:17 · 4914 阅读 · 1 评论 -
Java - ip2region - 使用篇
Java - ip2region - 使用篇本篇主要介绍 ip2region, ip2region 支持很多客户端,本次主要以Java来介绍在进行系统开发时,我们一般会涉及到获取到用户的具体位置信息,一般有两个方法:根据GPS 定位的信息 (一般用于手机端)用户的 IP 地址解析每个手机都不一定会打开 GPS,而且有时并不太需要太精确的位置(到城市这个级别即可),所以根据 IP 地址入手来分析用户位置是个不错的选择。下面就介绍一个分析 IP 地址一个比较好的东西 ip2region接原创 2022-04-27 16:02:39 · 6504 阅读 · 2 评论 -
Java - ip2region - 基础篇(你知道ip2region吗?)
Java - ip2region - 基础篇(你知道ip2region吗?)本篇主要介绍 ip2region, ip2region 支持很多客户端,本次主要以Java来介绍在进行系统开发时,我们一般会涉及到获取到用户的具体位置信息,一般有两个方法:根据GPS 定位的信息 (一般用于手机端)用户的 IP 地址解析每个手机都不一定会打开 GPS,而且有时并不太需要太精确的位置(到城市这个级别即可),所以根据 IP 地址入手来分析用户位置是个不错的选择。下面就介绍一个分析 IP 地址一个比较原创 2022-04-27 15:12:14 · 5715 阅读 · 0 评论 -
Java - Quarz 定时任务_使用注意点
Java - Quarz 定时任务_使用注意点前言在开发过程中,我们会用定时任务来执行一些操作,例如定时去捞取流水重试业务、定时去消息中间件获取消息等等相关需求简单的定时任务实现可以借助Spring提供的 @Scheduled 注解 详细看 Spring 原理之 Scheduled如果涉及到 定时任务的动态管理就需要使用到其他技术,下面介绍一下QuartzQuartz是一个开源的任务日程管理系统, 由 OpenSymphony开源,同时它是一个功能丰富的任务调用系统,可创建简单或者复杂的几十、原创 2022-04-25 19:12:33 · 859 阅读 · 0 评论 -
Java - Quarz 定时任务(JobDetail & Job、Trigger、Scheduler)
JAVA - Quarz 定时任务前言在开发过程中,我们会用定时任务来执行一些操作,例如定时去捞取流水重试业务、定时去消息中间件获取消息等等相关需求简单的定时任务实现可以借助Spring提供的 @Scheduled 注解 详细看 Spring 原理之 Scheduled如果涉及到 定时任务的动态管理就需要使用到其他技术,下面介绍一下QuartzQuartz是一个开源的任务日程管理系统, 由 OpenSymphony开源,同时它是一个功能丰富的任务调用系统,可创建简单或者复杂的几十、几百、甚至成原创 2022-04-25 17:30:13 · 2484 阅读 · 0 评论 -
Cron表达式
Cron表达式前言最近在看 @Schedule 注解的源码的时候,其中设置定时任务有涉及到 cron 表达式,发现自己只会一丢丢~然后自己去详细了解 并 玩了一下这个 cron 表达式,记录一下,也更方便自己掌握。Cron表达式cron 表达式,是一个字符串,由 6 个空格、7 个域组成,每一个域代表一个时间含义有以下两种语法格式:(一般 Year 可以省略,所以常见的为下面的第二种方式)Seconds Minutes Hours Day Month Week YearSeconds Mi原创 2022-04-21 16:09:48 · 9307 阅读 · 0 评论 -
Spring 原理之 Bean生命周期
Spring 原理之 Bean生命周期前言在面试的时候,Bean的生命周期一般都会被问到,之前有整理过 Spring 的原理之Ioc,但是 没有对Bean的生命周期流程单独汇总说明下面介绍一下,也更方便自己掌握。Bean生命周期总图:看这个图很复杂,其实很简单,Bean的生命周期就分为以下几个步骤:(是不是real简单~)实例化(Instantiation)属性赋值(populate)初始化(Initialization)销毁(Destruction)在 Spring DI 运行原创 2022-04-21 14:53:29 · 265 阅读 · 0 评论 -
Spring 原理之 @Scheduled(定时任务)
Spring 原理之 @Scheduled前言在开发过程中,我们会用一些简单的定时任务来实现操作,例如定时去捞取流水重试业务、定时去消息中间件获取消息等等相关需求简单的定时任务实现可以借助Spring提供的 @Scheduled 注解需要注意的是这些功能都是Spring Framework提供的,而非SpringBoot。因此下文的讲解都是基于Spring Framework的工程Spring中用**@Scheduled** 注解标记的方法,称为定时任务,它会在调用方的当前线程之外的独立的线程中执原创 2022-04-21 14:31:30 · 2163 阅读 · 0 评论 -
java jce-KeyGenerator(密钥生成)
java jce-KeyGenerator(密钥生成)在开发时,总要涉及到数据的加密与解密,之前一直有些糊涂,最近看了 jce.jar的源码,来整理记录一下接着上篇 java jce-Cipher(加密、解密) 来介绍一下 关于密钥生成的KeyGenerator1、概念JCA(Java Cryptography Architecture): Java密码体系结构JCE(Java Cryptography Extension):它是一组包,提供用于加密、密钥生成和协商以及 Message Aut原创 2022-04-20 11:19:31 · 2800 阅读 · 0 评论 -
java jce-Cipher(加密、解密)
java jce-Cipher(加密、解密)在开发时,总要涉及到数据的加密与解密,之前一直有些糊涂,最近看了 jce.jar的源码,来整理记录一下1、概念JCA(Java Cryptography Architecture): Java密码体系结构JCE(Java Cryptography Extension):它是一组包,提供用于加密、密钥生成和协商以及 Message Authentication Code(MAC)算法的框架和实现。它提供了对称、不对称、块和流密码的加密支持,并且还支持安全流原创 2022-04-20 10:13:19 · 3433 阅读 · 0 评论 -
加密模式介绍(ECB、CBC、PCBC、CFB、OFB、CTR)
加密模式介绍(ECB、CBC、PCBC、CFB、OFB、CTR)加密与解密的加密模式有很多种,在玩Cipher的时候,其中创建Cipher对象的时候需要指定加密模式,去学习了一下各种加密模式,在这里整理记录一下在加密的类型中,一般分为 对称加密、非对称加密、散列算法。针对 对称加密,一般又有 **分组加密 **和 序列密码分组加密(或 块加密):以 块 为单位进行一次加密,将明文按一定的位长分组成块,明文块加密后得到密文组。解密雷同,密文组解密还原成明文组。常见的有 DES,AES,3DES等。序原创 2022-04-19 17:06:25 · 21762 阅读 · 1 评论 -
Java内存分析工具——jmap
Java内存分析工具——jmap平时我们在开发Java应用的时候,会涉及到分析对象内存、内存监控,那么就涉及到jmap这个工具,学习后来介绍一下能干嘛?jmap 一般可用于:jmap能够打印给定Java进程、核心文件或远程DEBUG服务器的共享对象内存映射或堆内存的详细信息内存监控分析对象内存示例:怎么用?jmap 相关命令:可通过 jmap --help 查看jmap [option] :连接运行的进程 ,分析内存情况jmap [option] <executab原创 2022-04-15 11:23:14 · 17352 阅读 · 0 评论 -
Java分析工具——jinfo
Java分析工具——jinfo平时我们在开发Java应用的时候,会涉及到查看Jvm参数,那么就涉及到jinfo这个工具,学习后来介绍一下能干嘛?jinfo 一般可用于:查看JVV参数(常用),例如 时区、编码、Java版本等信息查看系统参数(常用),就是程序一般通过 System.getProperty(key) 获得的参数修改JVM参数(少用)示例:怎么用?jinfo 相关命令:可通过 jinfo --help 查看jinfo [option] :连接运行的进程 ,分析原创 2022-04-14 17:09:11 · 1310 阅读 · 0 评论 -
SpringBoot关于@Async线程池配置
SpringBoot关于@Async线程池配置我们在Spring项目的时候,会用到异步注解 @Async 注解,从 Spring原理之@Async 我们可以知道其实他底层用到的默认的所谓的线程池并不是真的线程池,每次调用都会创建一个新的线程,那么我们如何来修改这个默认的线程池或者说使用我们自定义的线程池呢?1、修改@Async默认线程池关于@Async的原理,可以查看 Spring原理之@Async 这篇博客,这里不在阐述关于修改 @Async默认的线程池 ,我们仅仅需要实现一个 AsyncConf原创 2022-02-23 09:34:42 · 12012 阅读 · 3 评论 -
SpringBoot关于文件上传配置的几种方式
SpringBoot关于文件上传配置的几种方式在进行SpringBoot项目文件临时目录位置及其最大文件传输大小等相关配置的时候,总结几种可以进行配置的方式1、@MultipartConfig 注解在 javax.servlet.annotation 包里有一个MultipartConfig 注解来进行文件上传的相关配置源码:package javax.servlet.annotation;@Target(ElementType.TYPE)@Retention(RetentionPolicy原创 2022-02-21 11:23:27 · 4607 阅读 · 0 评论 -
SpringBoot导入导出你会用吗?(EasyPoi)
Easypoi包的使用前言最近老板让我实现一个导入导出的功能,这个项目因为是一个很老的维护项目,关于excel的导入导出用的还是 jexcelapi这个包,我虽然已经封装了工具类了,但是我还是感觉很麻烦~ ,尤其是标题,不停的add(菜鸡的我)最近,看了看一些技术博客,正好看到了关于文件导入导出好用的包,EasyPoi 与 EasyExcel。恩,看这名字,咱来看看用这两个有多Easy~~首先说一下这两个包的区别:EasyPoi 占用内存大,性能不够好(看和谁比)。这个在学习得时候看到官网上有很原创 2022-01-12 09:30:48 · 2661 阅读 · 0 评论 -
org.mapstruct:mapstruct 包(@Mapper、@Mapping)的使用
org.mapstruct:mapstruct 包的使用最近在学习技术时候,发现一个特别好用的包,org.mapstruct:mapstruct,它是专门用来处理 domin 实体类与 model 类的属性映射的它的优势:很多项目大量映射的方式通过手动get、set,首先写法很low,没有技术含量。而且中间还可能牵涉了很多类型转换,嵌套之类的繁琐操作,非常的麻烦。关于属性的映射,apache的BeanUtil. copyProperties也可以实现,但是其性能差而且容易出异常,很多规范严禁使用这原创 2022-01-06 15:51:54 · 19334 阅读 · 3 评论 -
lombok 的使用
lombok 包的使用在做项目的时候,我们一般要在entity里面写大量的get/set/构造方法,不仅代码众多,而且看起来很low针对这个情况,lombok应运而生,我们经常使用这个包,来总结一下这个包里面的一些常用的注解1、导包在项目的pom.xml 文件夹中导入包。<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok --><dependency> <groupId>or原创 2022-01-05 12:36:08 · 1057 阅读 · 0 评论 -
javax.validation 包里@NotNull等注解的使用
javax.validation 包里@NotNull等注解的使用在做项目的时候,对pojo和传入的参数进行校验,如果是代码编写,需要很多if来判断其实可根据一些校验的注解来实现我们的参数校验,主要介绍一下常用的 javax.validation 这个仓库的使用,这里总结一下1、导包在项目的pom.xml 文件夹中导入包 <!-- https://mvnrepository.com/artifact/javax.validation/validation-api --> &l原创 2022-01-04 13:19:31 · 18996 阅读 · 0 评论 -
一篇搞懂分布式事务与分布式事务常见的解决方案
1、前言现在我们找工作大家的标配就是微服务、分布式系统,而系统中肯定少不了用事务,那其统带来的分布式事务 问题也成了标配了,如果你不会,面试官心中os:你也真敢在简历中写! 下面来聊聊这个分布式事务是个什么东西?在系统中我们如何来解决这个问题?2、分布式事务2.1 是什么?分布式系统是什么?多个服务/多个系统,它们部署在不同结点上,通过网络交互的方式来协同完成工作例如下面的这个主业务逻辑,有两个微服务(系统),每个微服务维护了自己的数据库事务是什么?事务可以看作是一组操作,这组操作要原创 2021-12-30 13:16:53 · 799 阅读 · 0 评论 -
Mac安装Maven
Mac安装Maven1、下载安装下载maven包下载地址:官网下载地址下载后解压。自己找个地方放置然后修改配置文件打开终端,输入vim ~/.bash_profile 按i进入编辑模式将下面两句拷贝到文件内export MAVEN_HOME=/usr/local/apache-maven-3.6.3 // 需要换成自己的maven所在位置export $PATH=$MAVEN_HOME/bin添加之后 执行 source ~/.bash_profile 为配置环境变量生效生原创 2021-05-17 20:36:10 · 329 阅读 · 0 评论 -
Mac安装JDK
Mac安装JDK1、下载安装下载官网下载地址安装JDK(下载好的安装包先安装)macos安装JDK路径如下:/Library/Java/JavaVirtualMachines/jdk1.8.0_211.jdk/Contents/Home(版本号不一样)2、配置环境变量进入cd ~ //切换到用户目录touch .bash_profilevim .bash_profile //编辑.bash_profile / /etc/profile在bash_profile文件原创 2021-05-17 20:34:19 · 2686 阅读 · 0 评论 -
JAVA-锁
JAVA锁介绍Java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率。本文旨在对锁相关源码(本文中的源码来自JDK 8)、使用场景进行举例。Java中往往是按照是否含有某一特性来定义锁,我们通过特性将锁进行分组归类,再使用对比的方式进行介绍,帮助大家更快捷的理解相关知识。下面给出本文内容的总体分类目录:乐观锁 VS 悲观锁乐观锁与悲观锁是一种广义上的概念,体现了看待线程同步的不同角度。在Java和数据库中都有此概念对应的实际应用。概念对于同一个数据的并发操作:转载 2021-05-08 14:14:39 · 89 阅读 · 0 评论 -
JAVA-原子类
Java原子类实现原理分析在谈谈java中的volatile一文中,我们提到过并发包中的原子类可以解决类似num++这样的复合类操作的原子性问题,相比锁机制,使用原子类更精巧轻量,性能开销更小,本章就一起来分析下原子类的实现机理。悲观的解决方案(阻塞同步)我们知道,num++看似简单的一个操作,实际上是由1.读取 2.加一 3.写入 三步组成的,这是个复合类的操作(所以我们之前提到过的volatile是无法解决num++的原子性问题的),在并发环境下,如果不做任何同步处理,就会有线程安全问题。最直接的原创 2021-05-08 11:25:22 · 116 阅读 · 0 评论 -
JAVA-创建线程的几种方式
创建线程的几种方式1、继承Thread类,重写run方法class MyThread extends Thread{ @Override public void run() { super.run(); }}public class TestThreadCreat { public static void main(String[] args) { MyThread myThread = new MyThread(); m原创 2021-05-02 15:51:27 · 1913 阅读 · 0 评论 -
JAVA-线程池
线程池1、是什么?线程池做的工作只是控制运行的线程数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了最大数量,超出数量的线程排队等候,等其他线程执行完毕,再从队列中取出任务来执行。它的主要特点为:线程复用;控制最大并发数;管理线程线程池的优势:第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的销耗。第二:提高响应速度。当任务到达时,任务可以不需要等待线程创建就能立即执行。第三:提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会销耗系统资原创 2021-05-02 15:50:55 · 309 阅读 · 0 评论 -
JAVA-函数式接口
前言Java1.8 中辅助lambda表达式的几种函数式接口,如下所示Counsumer接口传入一个T类型的参数,返回值是voidpublic void helpConsumer(){ Consumer<String> con = new Consumer<String>() { @Override public void accept(String s) { System.out.println(s);原创 2021-04-19 09:00:49 · 79 阅读 · 0 评论 -
JAVA-HashMap
HashMap的实现原理基础东西1)、HashMap的实例有俩个参数影响其性能: “初始容量”(16) 和 装填因子(0.75),也就是超过75%就进行扩容,扩容:newsize = oldsize*2,(扩容的容量为新容量的2倍,所以size一定为2的n次幂)2)、 解决冲突主要有四种方法:开放定址法所谓的开放定址法就是一旦发生了冲突,就去寻找下一个空的散列地址,只要散列表足够大,空的散列地址总能找到,并将记录存入拉链法(链地址法)基本思想是每个哈希表节点都有一个next指针,多个哈希表节点原创 2021-01-20 20:04:41 · 157 阅读 · 0 评论 -
ReentrantLock的原理
ReentrantLock的底层ReentrantLock的源码:(1)ReentrantLock是Lock的子类,支持序列化(2)ReentrantLock里面有一抽象的静态内部类Sync(继承了AQS),并且有一类型为该类Sync的成员变量 有两个Sync的子类,表示公平锁和非公平锁(3)ReentrantLock里面的方法都是通过sync调用其里面的方法进行实现的(4)ReentrantLock里面是默认使用非公平锁的,如果要使用公平锁,则在lock定义的时候需要传入参数truest原创 2021-04-11 10:00:56 · 169 阅读 · 0 评论