- 博客(115)
- 收藏
- 关注
原创 并发编程系列(十一) -超高并发读写锁StampedLock类介绍
StampedLock的使用方式比较简单,只需要实例化一个StampedLock对象,然后调用对应的读写方法即可,它有三个核心方法如下!
2025-02-28 16:55:35
790
原创 并发编程系列(十) -读写锁ReadWriteLock类介绍
实际上,读写锁ReadWriteLock里面有两个锁实现,一个是读操作相关的锁,称为共享锁,当多个线程同时操作时,不会让多个线程进行排队等待,大大的提升了程序并发读的执行效率;另一个是写操作相关的锁,称为排他锁,当多个线程同时操作时,只允许一个线程写入,其他线程进入排队等待;两者进行组合操作,就可以实现上面的预期效果。下面我们一起来看看它的基本用法!
2025-02-28 16:54:11
583
原创 并发编程系列(九) -可重入锁ReentrantLock类介绍(下)
在上一篇文章中,我们介绍了ReentrantLock类的一些基本用法,今天我们重点来介绍一下ReentrantLock其它的常用方法,以便对ReentrantLock类的使用有更深入的理解。
2025-01-27 10:34:48
800
原创 并发编程系列(八) -可重入锁ReentrantLock类介绍(上)
在之前的线程系列文章中,我们介绍到了使用synchronized关键字可以实现线程同步安全的效果,以及采用wait()、notify()和notifyAll()方法,可以实现多个线程之间的通信协调,基本可以满足并发编程的需求。
2025-01-27 10:32:52
861
原创 并发编程系列(七) -本地线程ThreadLocal介绍
在 Java web 项目中,想必很多的同学对ThreadLocal这个类并不陌生,它最常用的应用场景就是用来做对象的跨层传递,避免多次传递,打破层次之间的约束。
2024-12-31 15:41:36
670
原创 并发编程系列(六) -线程等待与唤醒机制介绍
在之前的线程系列文章中,我们介绍了synchronized和volatile关键字,使用它能解决线程同步的问题,但是它们无法解决线程之间协调和通信的问题。举个简单的例子,比如线程 A 负责将 int 型变量 i 值累加操作到 10000,然后通知线程 B 负责把结果打印出来。
2024-12-31 15:39:13
341
原创 并发编程系列(五) -死锁产生原因介绍
在之前的文章中,我们介绍了synchronized同步锁关键字的作用以及相关的用法,它能够保证同一时刻最多只有一个线程执行修饰的代码段,以实现线程安全执行的效果。但是如果过度的使用synchronized等方式进行加锁,程序可能会出现死锁现象。
2024-12-31 15:38:05
1139
原创 并发编程系列(四) -volatile关键字介绍
在上篇文章中,我们介绍到在多线程环境下,如果编程不当,可能会出现程序运行结果混乱的问题。出现这个原因主要是,JMM 中主内存和线程工作内存的数据不一致,以及多个线程执行时无序,共同导致的结果。
2024-12-31 15:36:16
921
原创 并发编程系列(三) -synchronized关键字介绍
在之前的线程系列文章中,我们介绍了线程创建的几种方式以及常用的方法介绍。今天我们接着聊聊多线程线程安全的问题,以及解决办法。实际上,在多线程环境中,难免会出现多个线程对一个对象的实例变量进行同时访问和操作,如果编程处理不当,会产生脏读现象。
2024-12-31 15:34:59
605
原创 并发编程系列(二) -Thread类介绍
在之前的文章中,我们简单的介绍了线程诞生的意义和基本概念,采用多线程的编程方式,能充分利用 CPU 资源,显著的提升程序的执行效率。其中java.lang.Thread是 Java 实现多线程编程最核心的类,学习Thread类中的方法,是学习多线程的第一步。下面我们就一起来看看,创建线程的几种方式以及Thread类中的常用方法。
2024-12-31 15:32:53
676
原创 并发编程系列(一) -多线程技术快速入门
在很多场景下,我们经常听到采用多线程编程,能显著的提升程序的执行效率。例如执行大批量数据的插入操作,采用单线程编程进行插入可能需要 30 分钟,采用多线程编程进行插入可能只需要 5 分钟就够了。既然多线程编程技术如此厉害,那什么是多线程呢?在介绍多线程之前,我们还得先讲讲进程和线程的概念。
2024-12-31 15:30:43
889
原创 JVM系列(十三) -常用调优工具介绍
在之前的文章中,我们介绍了 JVM 常用的命令使用,通过这些命令可以快速的查询线上服务的性能情况和排查相关的问题。不错,命令确实非常的管用,但是要想熟悉的记住这些命令,并非易事,除非很频繁的使用,否则真的很难。多数情况下,如果代码编程合理,服务器配置合理,服务也没有高并发压力,开发人员基本上很少会去关注 JVM 相关性能情况。
2024-12-23 15:44:20
1116
原创 JVM系列(十二) -常用调优命令汇总
虽然目前市场上有很多成熟的 JVM 可视化监控分析工具,但是所有的工具其实都依赖于 JDK 的接口和底层相关的命令,了解这些命令的使用对于我们在紧急情况下排查 JVM 相关的线上故障,会有更加直观的帮助。
2024-12-23 15:35:42
1246
原创 JVM系列(十一) -GC日志分析
在之前的文章中,我们介绍了 JVM 的垃圾收集器相关知识,那么如何分析当前虚拟机性能呢?其中 GC 日志起到至关重要的作用。实际上,每种垃圾收集器都有它独立的日志格式,尽管如此,虚拟机为了方便用户阅读,将各个收集器的日志都维持在一定的共性状态。下面我们一起来看看不同的垃圾收集器,相关的 GC 日志内容。
2024-10-22 15:13:02
1187
1
原创 JVM系列(十) -垃圾收集器介绍
如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。不同的虚拟机所提供的垃圾收集器可能会有很大差异,以 HotSpot 虚拟机为例,所包含的垃圾收集器可以用如下图来概括。
2024-10-22 15:10:01
907
原创 JVM系列(九) -垃圾对象的回收算法介绍
在之前的文章中,我们介绍了 JVM 内部布局、对象的创建过程以及运行期的相关优化手段。今天通过这篇文章,我们一起来了解一下对象回收的判定方式以及垃圾对象的回收算法等相关知识。
2024-10-17 11:51:37
1293
原创 JVM系列(八) -运行期的几种优化技术
在之前的文章中我们谈到过,相比 C/C++ 语言,Java 语言在运行效率方面要稍逊一些,因为 Java 应用程序是在虚拟机上运行,而 C/C++ 程序是直接编译成平台相应的机器码来运行程序。从虚拟机对外发布开始,开发团队一直在努力试图缩小 Java 与 C/C++ 语言在运行效率上的差距。从实际的结果来看,确实成果显著。本文就来聊聊 HotSpot 虚拟机为了提升 Java 程序的执行效率,都实现了哪些激动人心的优化技术。
2024-10-15 15:46:26
1109
原创 JVM系列(七) -对象的内存分配流程
在之前的文章中,我们介绍了类加载的过程、JVM 内存布局和对象的创建过程相关的知识。本篇综合之前的知识,重点介绍一下对象的内存分配流程。
2024-10-15 15:44:37
1160
原创 JVM系列(六) -对象的创建过程
在之前的文章中,我们介绍了类加载的过程和 JVM 内存布局相关的知识。本篇我们综合之前的知识,结合代码一起推演一下对象的真实创建过程,以及对象创建完成之后在 JVM 中是如何保存的。
2024-10-14 15:16:53
1685
原创 JVM系列(四) -内存布局详解
熟悉 Java 语言特性的同学都知道,相比 C、C++ 等编程语言,Java 无需通过手动方式回收内存,内存中所有的对象都可以交给 Java 虚拟机来帮助自动回收;而像 C、C++ 等编程语言,需要开发者通过代码手动释放内存资源,否则会导致内存溢出。
2024-10-11 11:58:59
1010
原创 JVM系列(三) -类加载器及双亲委派模型介绍
在之前的文章中,介绍了类的加载过程中,我们有提到在加载阶段,通过一个类的全限定名来获取此类的二进制字节流操作,其实类加载器就是用来实现这个操作的。
2024-10-11 11:55:10
1152
原创 JVM系列(一) -浅谈虚拟机的成长史
众所周知,Java 经过多年的发展,已经从一门单纯的计算机编程语言,发展成了一套成熟的软件解决方案。从互联网到企业平台,Java 是目前使用最广泛的编程语言。
2024-10-10 14:13:43
1150
原创 单例设计模式详解
单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一,属于创建型模式的一种,它提供了一种创建对象的最佳方式。
2024-09-30 16:47:51
555
原创 XML解析系列(一) -DOM 技术解析实现介绍
XML,一种可扩展标记语言,通常被开发人员用来传输和存储数据,定义也比较简单,通常如下方式开头,用来表述文档的一些信息。
2024-07-25 10:57:38
377
原创 如何在 SpringBoot 中优雅的做参数校验?
关于参数合法性验证的重要性就不多说了,即使前端对参数做了基本验证,后端依然也需要进行验证,以防不合规的数据直接进入服务器,如果不对其进行拦截,严重的甚至会造成系统直接崩溃!
2024-07-24 10:38:53
1324
原创 SpringBoot+ Sharding Sphere 轻松实现数据库字段加解密
在实际的软件系统开发过程中,由于业务的需求,在代码层面实现数据的脱敏还是远远不够的,往往还需要在数据库层面针对某些关键性的敏感信息,例如:身份证号、银行卡号、手机号、工资等信息进行加密存储,实现真正意义的数据混淆脱敏,以满足信息安全的需要。
2024-07-22 11:23:13
1560
原创 excel系列(三) - 利用 easyexcel 快速实现 excel 文件导入导出
本篇我们继续深入介绍另一款更优秀的 excel 工具库:easyexcel 。
2024-07-19 09:57:53
2378
原创 3分钟带你掌握Spring Boot中的定时调度服务
在实际的业务开发过程中,我们经常会需要定时任务来帮助我们完成一些工作,例如每天早上 6 点生成销售报表、每晚 23 点清理脏数据等等。
2024-07-19 09:54:03
908
原创 excel系列(二) - 利用 easypoi 快速实现 excel 文件导入导出
本篇我们继续深入介绍另一款优秀的 excel 工具库:easypoi。
2024-07-15 16:41:50
2866
原创 excel系列(一) - 利用 apache poi 实现 excel 文件导入导出
在平时的业务系统开发中,少不了需要用到导出、导入excel功能,今天我们就一起来总结一下,如果你正为此需求感到困恼,那么阅读完本文,你一定有所收获!
2024-07-15 16:36:53
1183
原创 如何设计一套单点登录系统 ?
在企业发展初期,使用的后台管理系统还比较少,一个或者两个。以电商系统为例,在起步阶段,可能只有一个商城下单系统和一个后端管理产品和库存的系统。
2024-07-12 10:05:32
809
原创 深入理解 Java 中的 try with resources
try-with-resources是 JDK 7 中引入的一个新的异常处理机制,它能让开发人员不用显式的释放try-catch语句块中使用的资源。
2024-07-10 10:31:47
2379
2
原创 利用SpringBoot+rabbitmq 实现邮件异步发送,保证100%投递成功
在之前的文章中,我们详细介绍了 SpringBoot 整合 mail 实现各类邮件的自动推送服务。但是这类服务通常不稳定,当出现网络异常的时候,会导致邮件推送失败。
2024-07-10 09:57:12
1330
原创 手把手带你使用JWT实现单点登录
JWT(英文全名:JSON Web Token)是目前最流行的跨域身份验证解决方案之一,今天我们一起来揭开它神秘的面纱!
2024-07-02 14:53:15
979
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人