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

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

一、并发编程知识体系
线程基础 线程是并发编程的核心概念,它是程序执行的最小单位。在操作系统中,线程的创建、调度、同步和通信是并发编程的基础。线程的创建通常涉及到操作系统提供的线程API,如Java中的Thread
类。线程的启动是通过调用线程的start()
方法实现的,这将导致线程进入就绪状态。线程的终止可以通过多种方式完成,包括自然终止(线程执行完毕)、强制终止(通过stop()
方法,已废弃)和异常终止(线程运行中抛出未捕获的异常)。
线程生命周期 线程的生命周期包括六个状态:新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)、等待(Waiting)和终止(Terminated)。线程从新建状态开始,经过就绪状态,最终进入运行状态。线程可能会因为等待某些资源(如锁)而进入阻塞状态,或者因为等待某个条件成立而进入等待状态。线程在完成其任务后进入终止状态。
线程优先级 线程优先级反映了线程在执行时的优先顺序。在Java中,线程优先级是一个整数,范围从1(最低)到10(最高)。线程的默认优先级是5。线程的优先级会影响调度器对线程的调度策略,但并不能保证高优先级的线程一定会得到更多的CPU时间。
守护线程 守护线程是一种特殊的线程,它为其他非守护线程提供服务。当所有非守护线程完成后,程序将退出。守护线程通常用于后台任务,如垃圾回收器。在Java中,可以通过调用setDaemon(true)
方法将线程设置为守护线程。
线程池 线程池是一个管理线程的集合,它预先创建一定数量的线程,并复用这些线程来执行任务。线程池可以减少创建和销毁线程的开销,提高系统性能。线程池的核心参数包括核心线程数、最大线程数、存活时间、工作队列和拒绝策略。
拒绝策略 当线程池中的线程数量达到最大值时,拒绝策略用于处理新提交的任务。常见的拒绝策略包括:
- AbortPolicy:抛出
RejectedExecutionException
异常。 - CallerRunsPolicy:由提交任务的线程自己执行该任务。
- DiscardPolicy:直接丢弃任务。
- DiscardOldestPolicy:丢弃队列中最早的任务。
工作队列类型 工作队列用于存储等待执行的任务。常见的工作队列类型包括:
- LinkedBlockingQueue:基于链表的阻塞队列,无界。
- ArrayBlockingQueue:基于数组的阻塞队列,有界。
- SynchronousQueue:同步队列,不存储元素,总是等待一个线程消费。
同步机制 同步机制用于解决多个线程对共享资源的竞争问题。常见的同步机制包括:
- 悲观锁:假设并发访问时会产生冲突,因此在操作数据前先加锁。
- 乐观锁:认为并发访问时冲突的概率较低,因此在操作数据时才加锁。
- 读写锁:允许多个线程同时读取数据,但只允许一个线程写入数据。
- 条件变量:允许线程在满足特定条件时等待,直到其他线程通知条件成立。
并发集合 并发集合是一组线程安全的集合类,如ConcurrentHashMap
、CopyOnWriteArrayList
等。这些集合类内部实现了线程安全的机制,以确保在并发环境下安全地访问数据。
ConcurrentHashMap ConcurrentHashMap
是一种线程安全的HashMap,它采用分段锁(Segment Lock)机制。每个段是一个小的锁,因此可以减少锁竞争,提高并发性能。
CopyOnWrite容器 CopyOnWrite容器是一种线程安全的容器,在每次修改操作时,都会创建一个新的副本。这种机制适用于读多写少的场景,因为它避免了锁的开销。
BlockingQueue BlockingQueue
是一种线程安全的队列,支持生产者和消费者模型。它允许生产者线程向队列中添加元素,消费者线程从队列中移除元素。常见类型包括LinkedBlockingQueue
和ArrayBlockingQueue
。
并发工具类 并发工具类提供了一系列用于处理并发问题的实用方法,如Phaser
、Exchanger
、FutureTask
等。
Phaser Phaser
是一种可重入的同步工具,用于协调多个线程的执行顺序。它可以模拟一个屏障,所有线程都必须到达屏障才能继续执行。
Exchanger Exchanger
是一种线程间交换数据的工具,允许两个线程在特定条件下交换数据。
FutureTask FutureTask
是一种异步执行任务的工具,允许线程在执行过程中获取任务执行结果。
非阻塞算法 非阻塞算法是一种在多线程环境下,不使用锁或同步机制,通过其他方式实现线程安全的方法。常见的非阻塞算法包括:
- CAS(Compare-And-Swap)原理:通过原子操作实现线程安全。
- Atomic类:提供了一系列原子操作类,如
AtomicInteger
、AtomicLong
、AtomicReference
等。 - 无锁队列:通过CAS原理实现线程安全的队列。
并发框架 并发框架是一组用于解决并发问题的工具和库,如Netty、Akka、Disruptor等。
Netty线程模型 Netty采用主从多线程模型,一个Boss线程负责接收客户端连接,多个Worker线程负责处理客户端的业务请求。
Akka Actor模型 Akka是一个基于Actor模型的并发框架,它将每个线程封装成一个Actor,并通过消息传递实现线程间的通信。
Disruptor环形缓冲区 Disruptor是一种高性能的并发框架,它使用环形缓冲区来存储数据,并通过无锁算法实现线程安全。
二、MyBatis知识体系
SQL映射 SQL映射是指将Java对象属性与数据库表字段进行映射的过程。MyBatis通过注解和XML配置来实现SQL映射。
注解映射 MyBatis提供了@Select
、@Insert
、@Update
、@Delete
等注解来实现SQL映射。这些注解可以简化SQL语句的编写。
结果集映射 结果集映射是指将数据库查询结果映射到Java对象的过程。MyBatis提供了@Results
、@Result
等注解来实现结果集映射。
关联查询 关联查询是指查询多个表之间的关联关系。MyBatis提供了@One
、@Many
等注解来实现关联查询。
动态SQL 动态SQL是指根据条件动态构建SQL语句。MyBatis提供了@SelectProvider
、@SqlProvider
等注解来实现动态SQL。
OGNL表达式 OGNL是一种表达式语言,用于在MyBatis中实现动态SQL。它允许在XML映射文件中直接编写表达式,从而动态生成SQL语句。
分支语句 分支语句用于根据条件执行不同的SQL语句。MyBatis提供了@If
、@Choose
等注解来实现分支语句。
批量操作 批量操作是指一次性执行多个SQL语句。MyBatis提供了@BatchInsert
、@BatchUpdate
等注解来实现批量操作。
缓存机制 MyBatis提供了两种缓存机制:一级缓存和二级缓存。
一级缓存 一级缓存是MyBatis默认的缓存机制,它存储在SqlSession
内部,用于缓存当前SqlSession
执行过程中的查询结果。
二级缓存 二级缓存是MyBatis提供的另一种缓存机制,它存储在全局范围内,用于缓存不同SqlSession
执行过程中的查询结果。
自定义缓存 MyBatis允许用户自定义缓存,通过实现Cache
接口来实现。
代理模式 MyBatis使用代理模式来实现Mapper接口的动态代理,使得Mapper接口可以直接被调用。
MapperProxy MapperProxy
是MyBatis内部用于实现Mapper接口动态代理的类。
插件拦截 MyBatis允许用户自定义插件,通过拦截SqlSession
的生命周期、执行器类型等环节来实现自定义功能。
动态代理执行流程 MyBatis使用动态代理技术来实现Mapper接口的代理,动态代理执行流程如下:
- 调用Mapper接口方法;
- 动态代理拦截方法调用;
- 根据方法参数构建SQL语句;
- 执行SQL语句并返回结果;
- 将结果转换为Java对象。
SqlSession生命周期 SqlSession
是MyBatis的核心对象,它代表了一次数据库会话。SqlSession
生命周期包括创建、使用和关闭三个阶段。
执行器类型 MyBatis提供了多种执行器类型,如SimpleExecutor
、BatchExecutor
、ReuseExecutor
和BatchExecutor
等。
延迟加载 延迟加载是指在实际需要时才加载数据,以提高应用程序的性能。在MyBatis中,可以通过<association>
标签的fetchType
属性来实现延迟加载。
扩展机制 MyBatis提供了多种扩展机制,如类型处理器、拦截器链、方言支持等。
类型处理器 类型处理器用于将数据库数据类型转换为Java数据类型。
拦截器链 拦截器链是一系列拦截器的组合,用于拦截SqlSession
的生命周期、执行器类型等环节。
方言支持 方言支持是指MyBatis对不同数据库的SQL语句进行适配。
通过以上知识点的串联,我们可以深入理解并发编程和MyBatis的原理和应用。在实际开发过程中,结合并发编程和MyBatis的知识,可以设计出高性能、可扩展的系统。
📥博主的人生感悟和目标

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

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