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

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

一、并发编程知识体系
线程基础
并发编程在多核处理器时代扮演着至关重要的角色,它允许应用程序通过并行执行任务来提升性能。在并发编程领域,线程是执行的基本单元。以下是线程基础知识的深入解析。
线程生命周期
线程的生命周期分为以下阶段:新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)、等待(Waiting)、超时等待(Timed Waiting)和终止(Terminated)。
- 新建:线程对象创建后,尚未分配系统资源,处于不可运行状态。
- 就绪:线程已准备好执行,等待调度器分配CPU资源。
- 运行:线程被调度器选中,开始执行。
- 阻塞:线程由于资源不足或发生异常等原因,暂时无法执行。
- 等待:线程调用sleep()方法或等待某个事件发生。
- 超时等待:线程在等待某个事件时设置了超时时间。
- 终止:线程执行完毕或被强制停止。
线程优先级
线程优先级决定了线程在调度器中的优先级,优先级高的线程有更高的机会被选中执行。在Java中,线程优先级分为10个等级,范围从1(最低优先级)到10(最高优先级)。通过setPriority()方法可以设置线程优先级。
守护线程
守护线程是一种特殊类型的线程,为其他线程提供服务。当所有非守护线程结束时,Java虚拟机会自动退出,即使守护线程仍在运行。通过调用setDaemon(true)方法可以将线程设置为守护线程。
线程池
线程池是一种管理线程的机制,它允许程序复用线程,而不是每次需要时都创建新线程。线程池的核心参数配置包括:
- 核心线程数:线程池在运行时保持的最小线程数。
- 最大线程数:线程池允许的最大线程数。
- 队列容量:用于存放等待执行任务的队列大小。
- 拒绝策略:当线程池中的线程数达到最大值,任务无法提交时,采用的拒绝策略。
工作队列类型
线程池的工作队列主要有以下几种类型:
- 阻塞队列(BlockingQueue):当工作队列满了,线程会阻塞,直到有空间。
- 优先队列(PriorityBlockingQueue):根据任务的优先级进行调度。
- 有限队列(LinkedBlockingQueue):有固定大小的队列。
- 无界队列(SynchronousQueue):任务提交后立即创建线程执行。
同步机制
同步机制是确保线程安全的关键。以下是一些常用的同步机制:
- 悲观锁:在执行前需要获得锁,直到执行完成释放锁。Java中,synchronized关键字和ReentrantLock是实现悲观锁的方式。
- 乐观锁:假设没有冲突,在执行过程中不使用锁,只有在出现冲突时才进行回滚。Java中,Atomic类和版本号实现乐观锁。
- 读写锁:允许多个线程同时读取数据,但只有一个线程可以写入数据。Java中,ReentrantReadWriteLock是实现读写锁的方式。
- 条件变量:允许线程在满足特定条件时才继续执行。Java中,Condition接口实现条件变量。
并发集合
为了处理并发场景下的集合操作,Java提供了多种并发集合类,如:
- ConcurrentHashMap:线程安全的HashMap,支持高并发访问。
- CopyOnWrite容器:在写入操作时,创建一个新副本,并在副本上进行修改,修改完成后替换原容器。
- BlockingQueue:线程安全的队列,支持线程之间的协调。
并发工具类
Java提供了许多并发工具类,如:
- Phaser:用于协调一组线程,实现阶段的同步。
- Exchanger:允许线程在某个点交换数据。
- FutureTask:表示异步计算的结果。
- 非阻塞算法:如CountDownLatch、CyclicBarrier等。
CAS原理
CAS(Compare-And-Swap)是一种非阻塞算法,它比较内存中的一个值和一个预期的值,如果相等,则将内存中的值替换为新的值。Java中的Atomic类是基于CAS原理实现的。
无锁队列
无锁队列是一种线程安全的队列实现,它不使用锁,而是利用CAS原理确保线程安全。
并发框架
- Netty线程模型:Netty采用主从多线程模型,主线程负责接收请求,从线程负责处理业务逻辑。
- Akka Actor模型:Akka是一个基于Actor模型的高性能并发框架,它将线程管理、消息传递和容错机制结合起来。
- Disruptor环形缓冲区:Disruptor是一种高性能的并发框架,它使用环形缓冲区来存储数据,并提供高效的并发访问。
二、MyBatis知识体系
SQL映射
MyBatis是一款优秀的持久层框架,它将数据库操作抽象为映射文件,简化了数据库操作。SQL映射是MyBatis的核心功能。
- 注解映射:MyBatis支持使用注解来定义SQL映射,方便快速开发。
- 结果集映射:将数据库表与Java对象进行映射,包括字段映射和关联映射。
- 关联查询:处理一对多、多对多等关联关系。
动态SQL
MyBatis支持动态SQL,可以根据条件动态生成SQL语句。
- OGNL表达式:MyBatis使用OGNL表达式来处理动态SQL,支持各种类型的表达式。
- 分支语句:根据条件执行不同的SQL片段。
- 批量操作:批量插入、删除和更新操作。
缓存机制
MyBatis提供了缓存机制,提高数据库操作性能。
- 一级缓存:默认的缓存机制,存储在SqlSession内部。
- 二级缓存:存储在MyBatis全局缓存中,可跨SqlSession共享。
- 自定义缓存:自定义缓存实现,支持更复杂的缓存策略。
代理模式
MyBatis使用代理模式来处理数据库操作。
- MapperProxy:MyBatis提供的代理类,负责生成动态代理对象。
- 插件拦截:通过拦截器机制实现插件功能,如日志记录、性能监控等。
- 动态代理执行流程:MyBatis根据映射文件生成动态代理对象,并在执行过程中调用相应的SQL语句。
SqlSession生命周期
SqlSession是MyBatis的核心对象,负责数据库操作。
- 创建SqlSession:通过SqlSessionFactory创建SqlSession。
- 使用SqlSession:执行数据库操作。
- 关闭SqlSession:释放资源,提交事务。
执行器类型
MyBatis提供了多种执行器类型,包括:
- 简单执行器:适用于单条SQL语句执行。
- 批处理执行器:适用于批量操作。
- 批处理批处理执行器:适用于批量操作和批处理操作。
延迟加载
MyBatis支持延迟加载,在需要时才加载关联对象。
- 类型处理器:将数据库类型转换为Java类型。
- 拦截器链:拦截器链可以对数据库操作进行预处理和后处理。
方言支持
MyBatis支持多种数据库方言,如MySQL、Oracle等。
通过以上对并发编程和MyBatis知识体系的详细解析,我们可以了解到,并发编程和MyBatis在软件开发中具有重要的地位。在实际项目中,我们需要根据具体情况选择合适的并发策略和MyBatis配置,以提高性能和可维护性。
📥博主的人生感悟和目标

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

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