📕我是廖志伟,一名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类实现,其生命周期管理涉及线程调度器。线程的并行执行依赖于多核处理器和操作系统调度,线程的切换由操作系统内核进行,通常涉及保存线程上下文和加载新线程上下文。
-
线程生命周期
线程的生命周期状态转换受线程调度策略和程序控制影响。在Java中,线程状态转换可以通过Thread类的方法如start()、run()、yield()、sleep()、wait()、notify()、notifyAll()等来实现。
-
线程优先级与守护线程
线程优先级由操作系统线程调度器根据线程的优先级值决定,Java中的线程优先级分为最大、正常、最小三个等级,以及10个优先级值(1到10),数值越高优先级越高。守护线程在Java虚拟机中属于较低优先级的线程,它主要用于执行后台任务,如垃圾回收、系统监控等。
-
线程池
线程池通过Executor框架实现,它管理一个线程池,并提供了执行任务的方法。核心线程数决定了线程池的基本容量,最大线程数则限制了线程池可以扩展的最大线程数。队列容量限制了等待执行的任务数量,活跃时间决定了空闲线程的超时回收机制。
-
拒绝策略与工作队列类型
拒绝策略是线程池在达到最大线程数时对任务的处理方式,如AbortPolicy、CallerRunsPolicy、DiscardPolicy、DiscardOldestPolicy等。工作队列类型决定了等待执行的任务存储方式,如LinkedBlockingQueue提供了无界队列,而ArrayBlockingQueue提供了有界队列。
-
同步机制
同步机制主要包括互斥锁(Mutex Lock)、读写锁(Read-Write Lock)、条件变量(Condition Variable)等。互斥锁保证同一时间只有一个线程可以访问共享资源,读写锁允许多个线程同时读取但不允许写入,条件变量用于线程间的通信和同步。
-
并发集合
并发集合如ConcurrentHashMap利用分段锁(Segment Lock)技术,将数据分割成多个段,每个段有自己的锁,从而降低锁竞争。CopyOnWriteArrayList在每次修改时创建一个新的数组副本,以避免线程间的冲突。
-
并发工具类
并发工具类如Phaser提供了一种灵活的线程同步机制,允许线程按照一定的顺序执行。Exchanger允许两个线程交换数据,FutureTask则提供了异步计算的结果。
-
非阻塞算法
非阻塞算法利用CAS操作实现无锁编程,通过原子性操作保证数据的一致性。CAS操作包括三个操作数:内存位置、预期值和新值,如果内存位置的值与预期值相同,则将其更新为新值。
-
并发框架
Netty线程模型通过主从多线程模型,将接收客户端连接和处理业务逻辑的任务分离,提高系统的吞吐量和响应速度。Akka Actor模型通过Actor系统提供了一种无状态的并发编程模型,通过消息传递实现Actor之间的通信。Disruptor环形缓冲区通过环形队列和预分配数组减少内存碎片和锁竞争,提高并发性能。
二、MyBatis知识体系
-
SQL映射
MyBatis的注解映射通过在Java接口或XML映射文件中使用注解来定义SQL语句。结果集映射则通过ResultMap定义数据库字段与Java对象的映射关系。关联查询通过@One和@Many注解实现一对一和多对一的关系映射。
-
动态SQL
动态SQL通过OGNL表达式和XML标签实现,如#{}用于插入参数,${}用于插入静态值。分支语句如 、 、 、 等用于实现条件判断。批量操作则通过 标签实现。
-
缓存机制
MyBatis的一级缓存是SqlSession级别的,二级缓存是Mapper级别的,可以跨SqlSession共享数据。自定义缓存通过实现Cache接口,并注入到SqlSessionFactory中。
-
代理模式
MapperProxy通过Java动态代理技术实现Mapper接口的代理,拦截接口方法的调用,动态生成相应的SQL语句。插件通过实现Interceptor接口,可以拦截MyBatis的执行过程,如查询、更新、删除等。
-
执行流程
MyBatis的执行流程包括SqlSession的生命周期管理、执行器类型的选择、SQL解析、参数绑定、结果映射等步骤。
-
延迟加载
MyBatis支持延迟加载,通过在ResultMap中指定 或 标签的lazy属性为true,实现关联对象的延迟加载。
-
扩展机制
类型处理器通过实现TypeHandler接口,处理Java类型与数据库类型之间的转换。拦截器链通过实现Interceptor接口,拦截MyBatis的执行过程。方言支持通过实现Dialect接口,为不同的数据库提供特定的SQL方言。
总结:
并发编程和MyBatis是现代软件开发中不可或缺的知识体系。通过深入理解线程的生命周期管理、同步机制、并发集合等概念,可以有效地提高程序的并发性能。MyBatis提供的SQL映射、动态SQL、缓存机制等功能,极大地简化了数据库操作,提高了开发效率。结合并发编程和MyBatis,可以构建高性能、可扩展的Java应用。
📥博主的人生感悟和目标

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

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