📕我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》(基础篇)、(进阶篇)、(架构篇)清华大学出版社签约作家、Java领域优质创作者、CSDN博客专家、阿里云专家博主、51CTO专家博主、产品软文专业写手、技术文章评审老师、技术类问卷调查设计师、幕后大佬社区创始人、开源项目贡献者。
📘拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、SpringBoot、SpringMVC、SpringCloud、Mybatis、Dubbo、Zookeeper),消息中间件底层架构原理(RabbitMQ、RocketMQ、Kafka)、Redis缓存、MySQL关系型数据库、 ElasticSearch全文搜索、MongoDB非关系型数据库、Apache ShardingSphere分库分表读写分离、设计模式、领域驱动DDD、Kubernetes容器编排等。不定期分享高并发、高可用、高性能、微服务、分布式、海量数据、性能调优、云原生、项目管理、产品思维、技术选型、架构设计、求职面试、副业思维、个人成长等内容。

🌾阅读前,快速浏览目录和章节概览可帮助了解文章结构、内容和作者的重点。了解自己希望从中获得什么样的知识或经验是非常重要的。建议在阅读时做笔记、思考问题、自我提问,以加深理解和吸收知识。阅读结束后,反思和总结所学内容,并尝试应用到现实中,有助于深化理解和应用知识。与朋友或同事分享所读内容,讨论细节并获得反馈,也有助于加深对知识的理解和吸收。💡在这个美好的时刻,笔者不再啰嗦废话,现在毫不拖延地进入文章所要讨论的主题。接下来,我将为大家呈现正文内容。

一、并发编程知识体系
- 线程基础
线程是程序执行的最小单位,它是操作系统能够进行运算调度的基本单位。线程的基础实现涉及操作系统的调度算法,例如时间片轮转、优先级调度等。线程生命周期包括创建、就绪、运行、阻塞、终止等状态,这些状态之间的转换受到线程调度策略和线程行为的影响。
-
线程生命周期:在Java中,线程的创建通常通过
Thread
类或Runnable
接口实现。线程的创建后进入就绪状态,等待CPU时间片。运行状态表示线程正在执行任务,阻塞状态可能由于I/O操作、等待锁等导致,而终止状态则表示线程执行完毕或被异常终止。 -
线程优先级:Java中线程优先级分为1到10共10个等级,优先级高的线程更有可能获得CPU时间片。优先级调度算法通常与线程的执行时间、系统负载等因素相关。
-
守护线程:守护线程(Daemon Thread)是一种特殊的线程,当所有非守护线程执行完毕后,程序将自动退出。守护线程通常用于执行后台任务,如垃圾回收。
-
线程池:线程池通过复用一定数量的线程来执行任务,减少了线程创建和销毁的开销。线程池的核心参数配置包括核心线程数、最大线程数、队列类型和拒绝策略等。
- 核心参数配置
线程池的核心参数配置对线程池的性能和稳定性至关重要。
-
核心线程数:核心线程数决定了线程池在空闲时保持的线程数量,它应与系统的CPU核心数相匹配,以充分利用系统资源。
-
最大线程数:最大线程数限制了线程池能创建的最大线程数,它应考虑系统的资源限制和任务执行的特点。
-
队列类型:工作队列用于存放等待执行的任务,常见的队列类型包括阻塞队列和非阻塞队列。阻塞队列在任务数量超过线程数时,会阻塞任务提交,而非阻塞队列则允许任务在队列满时直接被拒绝。
-
拒绝策略:拒绝策略定义了当线程池无法处理新提交的任务时的行为,常见的策略包括AbortPolicy(抛出异常)、CallerRunsPolicy(调用者运行)、DiscardPolicy(丢弃任务)和DiscardOldestPolicy(丢弃最旧任务)。
- 同步机制
同步机制确保多个线程在访问共享资源时不会产生冲突。
-
悲观锁:悲观锁假定数据在任一时刻都可能被修改,因此在操作数据前必须加锁。Java中的
synchronized
关键字和ReentrantLock
类提供了悲观锁的实现。 -
乐观锁:乐观锁假定数据在任一时刻可能不会被修改,因此在操作数据时不加锁,而是在更新数据时通过版本号或其他机制检查数据是否被修改。
-
读写锁:读写锁允许多个线程同时读取数据,但在写数据时,需要独占访问。Java中的
ReentrantReadWriteLock
类提供了读写锁的实现。
- 并发集合
并发集合是为并发环境设计的集合类,能够支持多线程并发访问。
-
ConcurrentHashMap:
ConcurrentHashMap
是线程安全的HashMap,它通过分段锁(Segment Locking)技术实现了高并发性能。每个段包含一个小的锁,多个段可以并行访问,从而提高了并发处理能力。 -
CopyOnWrite容器:
CopyOnWriteArrayList
和CopyOnWriteArraySet
等容器在数据被修改时,会创建一个数据的副本,避免多个线程同时修改同一份数据,适用于读多写少的场景。
- 并发工具类
并发工具类提供了多种用于线程同步和并发控制的工具。
-
Phaser:
Phaser
是一个灵活的线程同步工具,它允许线程在某个点等待其他线程,并支持动态增加参与者。 -
Exchanger:
Exchanger
允许两个线程在某个点交换数据,适用于需要线程间数据交换的场景。 -
FutureTask:
FutureTask
是一个可以异步执行任务的类,它提供了get()
方法来获取执行结果。
- 非阻塞算法
非阻塞算法通过无锁编程技术实现线程之间的同步。
-
CAS(Compare-And-Swap):CAS操作通过原子地比较和交换内存位置的值来实现无锁同步。
-
Atomic类:
AtomicInteger
、AtomicLong
等类提供了原子操作,如原子增加、比较和交换等。 -
无锁队列:无锁队列通过CAS操作和循环链表等数据结构实现线程安全,适用于高并发场景。
- 并发框架
并发框架提供了高级的并发编程抽象和工具。
-
Netty线程模型:Netty采用主从多线程模型,主线程负责处理连接和读写事件,从线程负责业务逻辑处理,提高了并发性能。
-
Akka Actor模型:Akka基于Actor模型,将并发编程抽象为消息传递,支持高并发、高可用、高容错。
-
Disruptor环形缓冲区:Disruptor使用环形缓冲区来存储数据,通过CAS操作实现生产者-消费者模型,提供了高性能的并发队列。
二、MyBatis知识体系
- SQL映射
SQL映射是MyBatis的核心功能之一,它将Java对象与数据库表之间的映射关系进行定义。
-
注解映射:MyBatis支持使用注解来定义SQL映射,如
@Select
、@Insert
等,简化了映射过程。 -
结果集映射:MyBatis通过
ResultMap
定义了Java对象与数据库表列之间的映射关系,支持自定义结果集处理。 -
关联查询:MyBatis支持一对一、一对多、多对多等关联查询,通过嵌套查询或联合查询实现。
- 动态SQL
动态SQL允许根据条件动态生成SQL语句。
-
OGNL表达式:OGNL(Object-Graph Navigation Language)是一种表达式语言,用于动态生成SQL语句。
-
分支语句:MyBatis支持使用
<if>
、<choose>
等标签实现条件分支的SQL语句。 -
批量操作:MyBatis支持使用
<foreach>
标签实现批量插入或更新操作。
- 缓存机制
MyBatis提供了缓存机制,提高查询性能。
-
一级缓存:SqlSession级别的缓存,存储最近执行的SQL语句及其结果。
-
二级缓存:全局缓存,存储相同命名空间下的相同SQL语句及其结果。
-
自定义缓存:MyBatis支持自定义缓存实现,如Ehcache、Redis等。
- 代理模式
MyBatis使用代理模式生成Mapper接口的代理实现。
-
MapperProxy:MyBatis中的
MapperProxy
实现了InvocationHandler
接口,用于生成动态代理。 -
插件拦截:MyBatis插件可以拦截MyBatis的执行流程,实现自定义功能。
-
动态代理:通过Java的反射机制动态创建代理对象。
- 执行流程
MyBatis的执行流程包括SqlSession的生命周期、执行器类型和延迟加载等。
-
SqlSession生命周期:SqlSession的创建、使用和关闭涉及数据库连接的管理。
-
执行器类型:MyBatis提供了多种执行器类型,如SimpleExecutor、ReuseExecutor等,影响SQL执行的性能。
-
延迟加载:MyBatis支持延迟加载,即在需要时才加载对象,提高性能。
- 扩展机制
MyBatis提供了扩展机制,允许开发者自定义功能。
-
类型处理器:MyBatis的类型处理器负责处理Java类型与数据库类型之间的转换。
-
拦截器链:MyBatis的拦截器链可以拦截MyBatis的执行流程,实现自定义功能。
-
方言支持:MyBatis支持不同数据库的SQL语法,通过方言实现。
总结:
并发编程和MyBatis是Java开发中重要的知识点,掌握这些知识可以帮助我们写出高性能、高可用的代码。在并发编程中,我们需要深入理解线程基础、同步机制、并发集合、并发工具类等技术的实现细节;在MyBatis中,我们需要掌握SQL映射、动态SQL、缓存机制、代理模式、执行流程、扩展机制等技术的实现细节。通过学习这些知识点,我们可以更好地应对实际开发中的挑战。
📥博主的人生感悟和目标

- 💂 博客主页: Java程序员廖志伟希望各位读者大大多多支持用心写文章的博主,现在时代变了,信息爆炸,酒香也怕巷子深,博主真的需要大家的帮助才能在这片海洋中继续发光发热,所以,赶紧动动你的小手,点波关注❤️,点波赞👍,点波收藏⭐,甚至点波评论✍️,都是对博主最好的支持和鼓励!
- 👉 开源项目: Java程序员廖志伟
- 🌥 哔哩哔哩: Java程序员廖志伟
- 🎏 个人社区: Java程序员廖志伟
- 🔖 个人微信号:
SeniorRD

📙经过多年在CSDN创作上千篇文章的经验积累,我已经拥有了不错的写作技巧。同时,我还与清华大学出版社签下了四本书籍的合约,并将陆续出版。这些书籍包括了基础篇、进阶篇、架构篇的📌《Java项目实战—深入理解大型互联网企业通用技术》📌,以及📚《解密程序员的思维密码--沟通、演讲、思考的实践》📚。具体出版计划会根据实际情况进行调整,希望各位读者朋友能够多多支持!
🔔如果您需要转载或者搬运这篇文章的话,非常欢迎您私信我哦~