![](https://img-blog.csdnimg.cn/20200921223103643.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java - 核心掌握
文章平均质量分 75
方方面面研究Java是如何工作的,JVM帮我们做了哪些优化
不埋雷的探长
深耕BigData技术,专注于大数据技术领域的知识分享。CSDN认证博客专家,目前就职于腾讯,内推可私聊~ 热爱软件,喜欢编程的阳光小伙子~ 千万千万不要放弃学习,千万千万要搞好人际关际,共勉~
展开
-
java命令行运行jar里的main类
java命令行运行jar里的main类一般运行包含manifest的jar包,可以使用java -jar <jar-file-name>.jar如果jar里没有 manifest,则可以使用java -cp foo.jar full.package.name.ClassName当main类依赖多个jar时,可以把多个jar打包到一个目录,然后用-Djava.ext.dirs指定该目录,引用依赖的多个jar。java -Djava.ext.dirs=<多个j原创 2021-12-04 11:27:53 · 3319 阅读 · 2 评论 -
数据工程师的 IDEA 自定义快捷模版
配置maven:jdk<build> <sourceDirectory>src/main/java</sourceDirectory> <plugins> <plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration>原创 2021-12-04 11:07:52 · 208 阅读 · 0 评论 -
IDEA 解决【中文字符显示乱码】问题
解决方式:修改IDEA配置,如下图从此不再乱码了,效果如下:文章最后,给大家推荐一些受欢迎的技术博客链接:JAVA相关的深度技术博客链接 Flink 相关技术博客链接 Spark核心技术链接 设计模式 —— 深度技术博客链接 机器学习 —— 深度技术博客链接 Hadoop相关技术博客链接 超全干货--Flink思维导图,花了3周左右编写、校对 深入JAVA 的JVM核心原理解决线上各种故障【附案例】 请谈谈你对volatile的理解?.原创 2021-12-04 11:02:51 · 1146 阅读 · 2 评论 -
多种java 日志框架【超详细图文】
一、目标日志的作用和目的 日志的框架 JUL的使用 LOG4J的使用 JCL的使用二、日志的概念2.1 日志文件日志文件是用于记录系统操作事件的文件集合,可分为事件日志和消息日志。具有处理历史数据、诊断问题的追踪以及理解系统的活动等重要作用。在计算机中,日志文件是记录在操作系统或其他软件运行中发生的事件或在通信软件的不同用户之间的消息的文件。记录是保持日志的行为,在最简单的情况下,消息被写入单个日志文件。许多操作系统,软件框架和程序包括日志系统。广泛使用的日志记录标准是在因特网原创 2020-12-06 16:13:50 · 1717 阅读 · 5 评论 -
log4j2 的使用【超详细图文】
log4j2 的使用Apache Log4j2 是对Log4j 的升级版本,参考了logback 的一些优秀的设计,并且修复了一些问题,因此带来了一些重大的提升,主要有:异常处理,在logback中,Appender中的异常不会被应用感知到,但是在log4j2中,提供了一些异常处理机制。 性能提升,log4j2 相较于log4j 和 logback 都具有明显的性能提升,有18倍性能提升,后面会有官方测试的数据。 自动重载配置,参考了logback的设计,当然会提供自动刷新参数配置,最实用的就是原创 2020-12-06 16:11:03 · 56894 阅读 · 6 评论 -
Tomcat 安装教程【附图文说明】
Apache Tomcat下载、安装、配置图文教程自我心得一、Tomcat下载Tomcat官网:Tomcat官方网址,可以在此处下载Tomcat。 点击左侧Download下的对应版本。注意有zip和exe两种格式的,zip是免安装版的,exe是安装版。同时观察自己的电脑是64位系统还是32位系统。例如进入:Tomcat 9 版本下载页面,下滑,到core处选择自己需要的版本,如图所示:二、Tomcat安装首先需要检查一下JDK 是否安装,我电脑之前已经安装过JDK,所以这里就可原创 2020-12-05 16:20:40 · 11955 阅读 · 12 评论 -
MAC 电脑安装jdk
一、先下载JDK,下载链接:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html二、安装,双击即可自动安装成功三、验证jdk 是否安装成功但是,实际的开发环境我们,需要配置JAVA_HOME 环境变量,接下来一起操作吧四、查看你JDK安装路径,打开终端输入就可以找到Java—>home:/usr/libexec/java_home -V五、打开终端,使用“touch .ba.原创 2020-12-05 10:44:56 · 8139 阅读 · 2 评论 -
多线程与高并发整理总结【超全面】
我们先说一下为什么要讲多线程和高并发?原因是,你想拿到一个更高的薪水,在面试的时候呈现出了两个方向的现象:第一个上天项目经验 高并发、缓存、大流量、大数据量的架构设计第二个入地各种基础算法,各种基础的数据结构 JVM OS线程、IO等内容多线程和高并发,就是入地里面的内容。一、基本概念我们先从线程的基本概念开始,给大家复习一下。如果基础不太好,说什么是线程都不知道的,则需要花时间去补初级内容的课。1. 什么是进程?什么是线程?Program app,比如QQ.exe原创 2020-11-22 10:37:30 · 2550 阅读 · 1 评论 -
多线程与高并发深入底层横向对比
程序运行的底层原理程序是什么?QQ.exe,PowerPoint.exe 进程是什么?程序启动,进入内存,资源分配的基本单元 线程是什么?程序执行的基本单位 程序如何开始运行? CPU 读指令 - PC(存储指令地址),读数据到寄存器Register,计算,回写到内存;然后指向下一条指令 线程如何进行调度?Linux线程调度器(OS)操作系统 线程切换的概念是什么?Context Switch CPU保存现场执行新线程,恢复现场,继续执行原线程这样的一个过程计算机的组成超线程:...原创 2020-11-01 11:07:34 · 394 阅读 · 0 评论 -
异步请求CloseableHttpAsyncClient的使用
1、前言项目有个需求,需要把一些没用影响业务逻辑的http请求改成异步请求,httpclient在4.0后提供新的api CloseableHttpAsyncClient可以使用,记录下使用过程。2、网络调用类型(1)传统BIO(Blocking IO)同步阻塞式IO,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。(2)NIO(Not-Blocking IO)NIO原创 2020-09-15 21:55:29 · 11611 阅读 · 1 评论 -
我们的垃圾收集器 —— Our Collectors 【翻译】
官方原文链接:https://blogs.oracle.com/jonthecollector/our-collectors目录一、垃圾收集器1.1 垃圾收集器介绍1.2 垃圾收集器组合二、常见问题解答1)UseParNew和UseParallelGC都使用多个GC线程收集年轻代。哪个更快?2)为什么“ ParNew”和“ Parallel Old”不能一起使用?3)如何将“ CMS”和“ Serial”一起使用?4)蓝色框是否带有“?”错字了吗?一、垃圾...原创 2020-09-15 12:33:27 · 393 阅读 · 2 评论 -
玩转JVM的GC 和 GC 调优 —— 实战
GC 基础知识1、什么是垃圾C语言申请内存:malloc、freeC++: new、deleteJava: new、自动回收自动内存回收,编程上简单,系统不容易出错,手动释放内存,容易出现两种类型的问题:忘记回收 多次回收2、如何定位垃圾引用计数 根可达算法3、常见的垃圾回收算法标记清除:位置不连续,产生内存碎片复制算法:没有内存碎片,浪费空间标记压缩:没有内存碎片,效率偏低4、JVM内存分代模型(用于分代垃圾回收算法)部分垃圾回收器使原创 2020-09-15 10:45:18 · 451 阅读 · 1 评论 -
HashMap 技术问题点解答
Hash的理解hash的基本概念就是把任意长度的输入通过一个hash算法之后,映射成固定长度的输出那你这里提到了任意长度的输入转化成固定长度的输出,会不会有问题?肯定会有问题的。在程序中(可能)碰到两个value值经过hash算法之后,算出同样的hash值,也就是会发生hash冲突那hash冲突可以避免么?理论上是没有办法避免的,就类比“抽屉原理”,比如说一共有10个苹果,但是咱一共有9个抽屉,最终一定会有一个抽屉里的数量是大于1的,所以hash冲突没有办法避免,只能尽量避免。你那认为稍微好一些原创 2020-09-10 22:08:54 · 3195 阅读 · 6 评论 -
HashMap 扩容机制
HashMap在1.7 和1.8 做了比较大的改变1.7之前使用的就是数组 + 链表,它数据节点是一个Entry 节点,它的一个内部类;1.7之前它的数据插入过程是使用了头插入,头插入法虽然效率比较高,但在resize拓容过程时,反复调用一个transfer的方法,把里面的一些Entry进行一个rehash,可能会造成链表的循环,就可能在下一次Get的时候出现一个死循环的情况;1.7没有加锁,也可能在多线程并发的情况下,数据不能保证它是一个安全的,就是我push的进去的值,取出来还是我push进去的一个原创 2020-09-07 12:59:34 · 348 阅读 · 4 评论 -
Java方面技术点小整理
Kafka用过么?用过用在什么场景?比如一个场景是实时行情异动、金融风控。因为我是做实时行情异动这块,我们将实时行情写入到kafka集群中,通过Spark Streaming/Flink 是消费Kafka topic中的数据。分析的结果数据可以写入到MySQL/HBase或者再写回Kafka中供其它应用继续分析。Kafka的消息是有序的吗?它是全局有序的么?kafka是有序的,但它的有序是局限的。比如你发的消息,消费消息的时候一个consumer只能一个partition这样的消息,一个parti原创 2020-09-07 11:27:49 · 1328 阅读 · 0 评论 -
Java 并发 —— Synchronized 关键字和锁升级 【可下载 Synchronized_思维导图】
一、Synchronized使用场景Synchronized 是一个 Java同步关键字,在某些多线程场景下,如果不进行同步会导致数据不安全,而 Synchronized 关键字就是用于代码同步。什么情况下会数据不安全呢,要满足两个条件:一是数据共享(临界资源),二是多线程同时访问并改变该数据。下面是模拟火车票售卖的示例程序,具体如下:// Java 并发 —— Synchronized 关键字和锁升级 【争取小白也能看懂】// 线程操作资源类 - 共享资源class TrainTick.原创 2020-08-22 18:14:26 · 597 阅读 · 0 评论 -
Java 内存模型 —— 用示例剖析
一、java 内存模型很多人将【java 内存结构】与【java 内存模型】傻傻分不表,【java 内存模型】是 Java Memory Model (JMM) 的意思。关于它的权威解释,请参考:https://download.oracle.com/otn-pub/jcp/memory_model-1.0-pfd-spec-oth-JSpec/memory_model-1_0-pfd-spec.pdf?AuthParam=1562811549_4d4994cbd5b964cd2907ea22ca0原创 2020-08-20 23:29:27 · 653 阅读 · 1 评论 -
arthas 开源神器使用说明
先需要下载好 arthas工具:官网链接https://github.com/alibaba/arthas/blob/master/README_CN.md下载方式:curl -O https://arthas.aliyun.com/arthas-boot.jar 运行 arthas:java -jar arthas-boot.jar阿里开源 arthas 帮助命令一览表 命令 命令描述 中文描述 help Display Arthas Help 查看命令...原创 2020-08-22 23:12:51 · 755 阅读 · 0 评论 -
Java 运行期优化 —— 附示例代码、截图证明
目录运行期优化一、即时编译1.1逃逸分析1.2 方法内联1.3 字段优化二、反射优化运行期优化Java程序最初是通过解释器(Interpreter)进行解释执行的,当虚拟机发现某个方法或代码块的运行特别频繁时,就会把这些代码认定为“热点代码”(Hot Spot Code)。为了提高热点代码的执行效率,在运行时,虚拟机将会把这些代码编译成与本地平台相关的机器码,并进行各种层次的优化,完成这个任务的编译器称为即时编译器(Just In Time Compiler,下文中简..原创 2020-08-19 22:08:46 · 660 阅读 · 1 评论 -
Java 类加载器 —— 从底层源码分析它帮我们做了什么?
目录背景知识补充加载概述 一、类加载器基本概念1.1 类加载器加载 Class 大致要经过如下8个步骤1.2 JVM的类加载机制主要有如下3种1.3 这里说明一下双亲委派机制二、启动类加载器三、扩展类加载器四、双亲委派 - 源码分析1五、双亲委派 - 源码分析2六、线程上下文类加载器七、自定义类加载器背景知识补充从 Java类的生命周期而言,一个类包括如下几个阶段:类加载阶段分类:加载、链接(验证/准备/解析)、初始化(<cinit&...原创 2020-08-19 09:11:05 · 489 阅读 · 0 评论 -
Java 类加载 —— 底层是如何实现的?
类加载阶段有:加载、连接、初始化1.1 加载将类的字节码载入方法区中,内部采用 c++ 的instanceKlass 描述 java 类,它的重要 field 域有: _java_mirror 即 java 的类镜像,起到桥梁作用,例如对 String 来说,就是 String.class, 作用是把 kclass 暴露给 java 使用 _super 即父类 _fields 即成员变量 _methods 即方法 _constants 即常量池 _class_loader 即类原创 2020-08-17 23:12:11 · 797 阅读 · 0 评论 -
Java编译期处理(语法糖)—— 编译器到底干了些什么?
所谓的语法糖,其实就是指 java 编译器所 *.java 源码编译为 *.class字节码的过程,自动生成和转换的一些代码, 主要是为了减轻程序员的负担,算是 java编译器给我们的一个额外福利(给糖吃嘛)。注意: 以下代码的分析,借助了 javap 工具,idea 的反编译功能,idea插件 jclasslib等工具。另外,编译器转换的结果直接就是 class字节码,只是为了便于阅读,给出了几乎等价的 java源码方式,并不是编译器还会转换出中间的 java源码,切记。编译期处理1.1 ..原创 2020-08-16 15:24:46 · 875 阅读 · 1 评论 -
Java字节码角度分析:Synchronized ——提升硬实力11
在前面的文章中,有详细地介绍java字节码相关的知识,有兴趣的可以提前了解一下。1.Java字节码的一段旅行经历——提升硬实力12.Java字节码角度分析a++ ——提升硬实力23.Java字节码角度分析条件判断指令 ——提升硬实力34.Java字节码角度分析循环控制 ——提升硬实力45.Java字节码角度分析判断结果 ——提升硬实力56.Java字节码角度分析构造方法 ——提升硬实力67.Java字节码角度分析方法调用 ——提升硬实力78.Java字节码角度分析多态原理 —原创 2020-08-15 23:26:17 · 381 阅读 · 0 评论 -
Java字节码角度分析:异常_finally——提升硬实力10
在前面的文章中,有详细地介绍java字节码相关的知识,有兴趣的可以提前了解一下。1.Java字节码的一段旅行经历——提升硬实力12.Java字节码角度分析a++ ——提升硬实力23.Java字节码角度分析条件判断指令 ——提升硬实力34.Java字节码角度分析循环控制 ——提升硬实力45.Java字节码角度分析判断结果 ——提升硬实力56.Java字节码角度分析构造方法 ——提升硬实力67.Java字节码角度分析方法调用 ——提升硬实力78.Java字节码角度分析多态原理 —原创 2020-08-15 22:03:09 · 380 阅读 · 0 评论 -
Java字节码角度分析异常处理——提升硬实力9
在前面的文章中,有详细地介绍java字节码相关的知识,有兴趣的可以提前了解一下。1.Java字节码的一段旅行经历——提升硬实力12.Java字节码角度分析a++ ——提升硬实力23.Java字节码角度分析条件判断指令 ——提升硬实力34.Java字节码角度分析循环控制 ——提升硬实力45.Java字节码角度分析判断结果 ——提升硬实力56.Java字节码角度分析构造方法 ——提升硬实力67.Java字节码角度分析方法调用 ——提升硬实力78.Java字节码角度分析多态原理 —原创 2020-08-15 17:06:39 · 326 阅读 · 0 评论 -
Java字节码角度分析多态原理 ——提升硬实力8
在前面的文章中,有详细地介绍java字节码相关的知识,有兴趣的可以提前了解一下。1.Java字节码的一段旅行经历——提升硬实力12.Java字节码角度分析a++ ——提升硬实力23.Java字节码角度分析条件判断指令 ——提升硬实力34.Java字节码角度分析循环控制 ——提升硬实力45.Java字节码角度分析判断结果 ——提升硬实力56.Java字节码角度分析构造方法 ——提升硬实力6通过:6.Java字节码角度分析构造方法 ——提升硬实力6,我们已经知道了如下知识:inv原创 2020-08-15 16:05:15 · 1048 阅读 · 1 评论 -
Java字节码角度分析方法调用 ——提升硬实力7
在前面的文章中,有详细地介绍java字节码相关的知识,有兴趣的可以提前了解一下。1.Java字节码的一段旅行经历——提升硬实力12.Java字节码角度分析a++ ——提升硬实力23.Java字节码角度分析条件判断指令 ——提升硬实力34.Java字节码角度分析循环控制 ——提升硬实力45.Java字节码角度分析判断结果 ——提升硬实力56.Java字节码角度分析构造方法 ——提升硬实力6下面我们将以字节码的视角来方法调用,java代码如下:// 从字节码角度来分..原创 2020-08-14 21:07:22 · 426 阅读 · 0 评论 -
Java字节码角度分析构造方法 ——提升硬实力6
在前面的文章中,有详细地介绍java字节码相关的知识,有兴趣的可以提前了解一下。1.Java字节码的一段旅行经历——提升硬实力12.Java字节码角度分析a++ ——提升硬实力23.Java字节码角度分析条件判断指令 ——提升硬实力34.Java字节码角度分析循环控制 ——提升硬实力45.Java字节码角度分析判断结果 ——提升硬实力5下面我们将以字节码的视角来分析构造方法CInit// 从字节码角度来分析:构造方法public class T09_ByteAnal.原创 2020-08-14 20:17:45 · 355 阅读 · 0 评论 -
Java字节码角度分析判断结果 ——提升硬实力5
在前面的文章中,有详细地介绍java字节码相关的知识,有兴趣的可以提前了解一下。1.Java字节码的一段旅行经历——提升硬实力12.Java字节码角度分析a++ ——提升硬实力23.Java字节码角度分析条件判断指令 ——提升硬实力34.Java字节码角度分析循环控制 ——提升硬实力4下面我们将以字节码的视角来分析判断结果// 从字节码角度来分析:判断结果public class T08_ByteAnalyseJudgeResult { public stat..原创 2020-08-14 10:29:29 · 323 阅读 · 0 评论 -
Java字节码角度分析循环控制 ——提升硬实力4
在前面的文章中,有详细地介绍java字节码相关的知识,有兴趣的可以提前了解一下。1.Java字节码的一段旅行经历——提升硬实力12.Java字节码角度分析a++ ——提升硬实力23.Java字节码角度分析条件判断指令 ——提升硬实力3下面我们将以字节码的视角来分析循环控制指令循环控制指令:其实循环控制还是前面介绍的那些指令,例如while循环:// 从字节码角度来分析:循环控制指令public class T05_ByteAnalyseWhile { publ..原创 2020-08-14 09:39:26 · 360 阅读 · 0 评论 -
Java字节码角度分析条件判断指令 ——提升硬实力3
在前面的文章中,有详细地介绍java字节码相关的知识,有兴趣的可以提前了解一下。1.Java字节码的一段旅行经历——提升硬实力12.Java字节码角度分析a++ ——提升硬实力2下面将详细介绍一下java是if 条件判断是如何通过字节码来实现判读的。以下是java条件判断对应的字节码:指令 助记符 含义 0x99 ifeq 判断是否 == 0 0x9a ifne 判断是否 != 0 0x9b iflt 判断是否 &l原创 2020-08-13 21:00:15 · 555 阅读 · 0 评论 -
Java字节码角度分析a++ ——提升硬实力2
首先建议先看一下基于前面的字节码知识:Java字节码的一段旅行经历——提升硬实力1在日常的项目开发中,经常遇到a++、++a、a--之类,下面我们开始从字节码的视角来分析a++。java代码如下:/* 从字节码角度分析 a++ 相关题目 */public class T03_ByteAnalyseAPlusPlus { public static void main(String[] args) { int a = 10; int b = a.原创 2020-08-13 13:05:51 · 611 阅读 · 1 评论 -
Java字节码的一段旅行经历——提升硬实力1
字节码指令1.1 什么是字节码1.2 javap 工具自己分析类文件太麻烦了,Oracle提供了javap工具来反编译class文件javap -v HelloWorld.class/Library/Java/JavaVirtualMachines/jdk1.8.0_241.jdk/Contents/Home/bin/javap -v com.jvm.t07_bytecode.T01_HelloWorldClassfile /Users/lei/IdeaProjects/Jv.原创 2020-08-11 10:19:32 · 1069 阅读 · 0 评论 -
深入聊聊Java 垃圾回收机制【附原理图及调优方法】
1、如何判断对象可以回收1.1引用计数法1.2可达性分析算法1.3四种引用2、垃圾回收算法2.1标记清除定义:Mark Sweep速度较快 会造成内存碎片2.2标记整理定义:Mark Compact速度慢 没有内存碎片2.3复制定义:Copy不会有内存碎片 需要占用双倍内存空间3、分代垃圾回收对象首先分配在伊甸园区域 新生代空间不足时,触发minor gc,伊甸园和from存活的对象使用 copy复制到 to中,...原创 2020-08-08 15:58:53 · 3125 阅读 · 8 评论 -
深入JAVA 的JVM核心原理解决线上各种故障【附案例】
什么是JVM?Java Virtual Machine - java程序的运行环境(java二进制字节码的运行环境)JVM好处?1、一次编写,到处运行的基石【重点】2、自动内存管理,垃圾回收功能【重点】3、数据下标越界检查4、多态,面向对象编程JVM、JRE、JDK三者比较:学习JVM有什么用?面试理解底层的实现原理中高级程序的必备技能JVM组成有哪些?常见的JVM涉及其关相关的技术链接:1.Hadoop相关技术博客链接2.S...原创 2020-07-30 20:23:41 · 3711 阅读 · 11 评论 -
Java 方式实现词云显示
先来看下词云效果图吧!实现词云图2种方式word_cloud、stylecloudword_cloud :http://amueller.github.io/word_cloud/stylecloud :https://github.com/minimaxir/stylecloud1、需要先添加一下maven依赖 <dependency> <groupId>com.kennycason</groupId>.原创 2020-07-29 21:17:32 · 4724 阅读 · 2 评论 -
Spark 核心技术链接
【重点推荐】实战示例:分享大数据Spark常用操作示例,含有scala版、对应的java8 lambda版本,记得star【面试类型】聊聊RPC通信,经常被问到的一道面试题。源码+笔记,包懂【Spark原理】spark中job,stage,task之间的关系【Spark原理】Spark 启动Master失败原因分析【Spark原理】示例演示:Spark性能优化之RDD持久化【Spark原理】实例验证spark开发中的map与flatmap...原创 2020-07-25 11:17:54 · 1377 阅读 · 1 评论 -
JAVA相关的深度技术博客链接
聊聊RPC通信,经常被问到的一道面试题。源码+笔记,包懂JAVA编程之Volatile关键字--请谈谈你对volatile的理解说说Java 多线程之悲观锁与乐观锁请你说说进程、线程、纤程之间的区别?...原创 2020-07-25 10:46:11 · 3081 阅读 · 0 评论 -
请你说说进程、线程、纤程之间的区别?
相信很多小伙伴们在面试的时候,面试官都会提这样的一个问题。请你说说什么是进程,什么是线程,两者有什么区别?很多小伙伴可能会直接说,进程就是一个个后台程序,线程是在进程中创建出来的。这种回答也没什么毛病,粗略的来说是对的,就是相对不够专业。但如果按下面说的来回答,就非常专业了,也是面试官想要的答案:进程:是操作系统资源分配的基本单位,比如内存、打开文件、网络IO,分配了独立的内存空间 线程:是操作系统资源调度的基本单位,cpu分配的基本单位 纤程:是用户态的线程,是线程中的线程,切换原创 2020-07-25 10:48:40 · 5030 阅读 · 2 评论 -
说说Java 多线程之悲观锁与乐观锁
请您说说悲观锁,和乐观锁的区别一、悲观锁总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程)。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。Java中synchronized和ReentrantLock等独占锁就是悲观锁思想的实现。二、乐观锁总是假设最好的情况,每次去拿数据的时候都认为别原创 2020-07-19 10:20:57 · 772 阅读 · 0 评论