自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(176)
  • 收藏
  • 关注

原创 RabbitMQ消息队列:延迟消息

RabbitMQ实现延迟消息的两种方案及订单超时处理实战 摘要: 本文介绍了RabbitMQ实现延迟消息的两种方案:1)基于死信交换机+TTL的方案,实现简单但时间精度不高;2)官方DelayExchange插件方案,精度更高但需额外安装插件。重点讲解了在电商订单支付状态同步场景下的实战应用,提出"梯度延迟检测"优化策略(10秒、30秒、1分钟等多级检测),通过MultiDelayMessage对象和监听器逻辑实现支付状态的高效检测。对比分析了两种方案的优缺点及适用场景,强调DelayE

2026-08-03 22:31:22 429

原创 RabbitMQ消息队列:业务幂等性

文章摘要:分布式系统中消息重复投递问题常见,可能导致严重业务异常。幂等性设计是解决这一问题的关键,确保操作执行多次与一次结果相同。文章对比了两种幂等方案:唯一消息ID(需维护去重表)和更推荐的业务状态判断法(利用状态字段实现原子更新)。同时建议采用定时任务作为兜底方案,主动查询支付状态保障最终一致性。最佳实践是结合消息可靠性、消费幂等和定时兜底,在不引入分布式事务的情况下实现高可用最终一致性。(149字)

2026-08-03 17:07:15 365

原创 RabbitMQ消息队列:消费者的可靠性

本文介绍了RabbitMQ消息消费失败时的优雅处理方案。通过配置ErrorMessageConfig类,实现了"重试+失败转储"的两阶段处理策略:首先根据配置进行自动重试(最大次数、间隔等可配置),当重试耗尽后,通过RepublishMessageRecoverer将消息路由到专门的错误队列(error.queue)。方案具有自动重试、失败隔离、可观测性等优点,且对业务代码无侵入,通过Spring AMQP基础设施自动完成。配置类使用条件注解,可根据需要灵活开关,并自动记录异常堆栈等关键

2026-08-02 16:54:54 400

原创 RabbitMQ消息队列:MQ的可靠性

本文详细介绍了RabbitMQ消息可靠性的服务端保障方案,重点从数据持久化和惰性队列两个维度展开。在数据持久化方面,需要同时配置交换机、队列和消息的持久化,并结合生产者确认机制确保消息落盘;惰性队列通过消息直接落盘、按需加载的机制,有效解决消息积压导致的内存溢出问题。文章对比了不同方案的适用场景,并给出最佳实践清单:生产环境应同时开启持久化、异步确认和LazyQueue,金融等核心业务还需配合手动ACK机制。建议升级到RabbitMQ 3.12+版本以获得默认的LazyQueue支持。

2026-08-02 14:24:22 321

原创 RabbitMQ消息队列:发送者的可靠性

本文介绍了RabbitMQ消息可靠性保障的三个关键环节:生产者发送、MQ存储和消费者处理。重点讲解了生产者端的保障措施:1. 通过重试机制应对网络问题;2. 使用确认机制(Publisher Confirm和Return)确保消息到达Exchange和Queue。文章提供了详细的SpringAMQP配置示例,并分析了不同场景下的回执结果,最后建议根据业务需求选择性启用确认机制,常规业务开发阶段即可规避大部分问题。

2026-08-01 16:42:44 204

原创 RabbitMQ:声明式Spring AMQP

本文介绍了使用Spring AMQP实现RabbitMQ队列和交换机的程序化声明方法。主要内容包括:1. 程序化声明的必要性:避免手动创建带来的环境不一致问题,实现基础设施即代码(IaC)2. Spring AMQP核心API:Queue类、Exchange接口体系、ExchangeBuilder和BindingBuilder的使用3. 四种交换机模式实现:Fanout、Direct模式的配置方法,推荐使用@RabbitListener注解简化开发4. 消息转换器优化:使用Jackson替代默认JDK序列化

2026-08-01 09:41:51 457 1

原创 RabbitMQ消息队列:交换机机制

RabbitMQ交换机指南:类型与应用场景 摘要: RabbitMQ中的交换机(Exchange)是消息路由的核心组件,负责将消息分发到队列。本文详细介绍了三种常用交换机类型:1)Fanout广播模式,无条件发送给所有绑定队列;2)Direct精确路由,基于RoutingKey完全匹配;3)Topic通配符路由,支持*和#匹配规则。每种类型都通过工作原理、控制台操作和代码示例进行说明,并对比了它们的特性差异和适用场景。文章还强调Exchange不存储消息的特性,提醒注意消息丢失风险,建议合理命名路由键,生产

2026-07-31 20:03:02 614

原创 RabbitMQ消息队列:SpringAMQP

SpringAMQP是Spring对RabbitMQ的封装工具,简化了消息队列开发。它支持自动声明队列/交换机,提供RabbitTemplate发送消息和@RabbitListener接收消息。文章演示了基础收发流程,重点讲解了WorkQueues模式下多消费者竞争消费的优化方案(通过prefetch参数实现"能者多劳")。最后总结了核心概念(队列/交换机/绑定/虚拟主机)和最佳实践,包括环境隔离、异常处理和性能监控建议。该工具显著提升了RabbitMQ在Spring生态中的开发效率。

2026-07-31 17:34:02 274

原创 RabbitMQ消息队列:安装与控制台操作

RabbitMQ是基于Erlang开发的开源消息中间件,支持AMQP协议,实现异步通信、系统解耦和流量削峰。其核心架构包括生产者、消费者、队列、交换机和虚拟主机。通过Docker可快速部署带管理控制台的RabbitMQ环境,管理界面提供连接、队列、交换机等监控功能。实际操作包含创建队列、绑定交换机、发送消息等步骤,其中fanout类型交换机会将消息广播至所有绑定队列。通过VirtualHost和用户权限管理实现多项目环境隔离,确保数据安全。RabbitMQ支持多种交换机类型(Direct/Fanout/To

2026-07-30 17:20:52 195

原创 RabbitMQ消息队列:从同步到异步的入门

《微服务通信方式演进:从同步调用到异步消息队列实践》摘要 本文探讨微服务架构中通信方式的优化路径。传统同步调用存在耦合度高、性能瓶颈和级联故障等问题,而基于RabbitMQ的异步通信能有效解决这些痛点。文章详细对比了主流消息队列技术特性,重点解析RabbitMQ的核心组件(生产者/消费者、交换机/队列)和可靠性机制(持久化/确认机制/镜像队列)。通过典型应用场景展示异步通信在解耦服务、流量削峰等方面的优势,同时指出需根据业务场景平衡同步与异步方案。RabbitMQ凭借其灵活路由和高可靠性,成为企业级异步通信

2026-07-30 15:48:51 409 2

原创 Java虚拟机:对象晋升机制与Finalize内存陷阱

哪怕它是刚出生的零岁对象,因为它无论如何都放不进 Survivor 区,为了不阻塞新生代的正常运行,JVM 会在分配时直接将其丢进老年代。,将那些“年龄偏大”的对象直接“特批”晋升到老年代,目的是为了给新生代腾出更多空间。从GC日志中我们会发现,原本在新生代中历经沧桑的 5MB map 数据,最终出现在了老年代,而新生代使用率降至 0。:如果 Minor GC 后,Survivor 区(幸存者区)中相同年龄的对象的总大小超过 Survivor 区空间的。而未被回收,其年龄(Age)就会增加 1 岁。

2026-07-28 17:22:27 342

原创 Java虚拟机:G1垃圾回收器

G1垃圾回收器采用"化整为零"的思想,将堆内存划分为多个大小相同的Region(1MB-32MB),解决了传统GC面临的全堆扫描耗时和内存碎片问题。其五大核心特性包括并行回收、并发执行、逻辑分代、空间整理和可预测停顿。G1通过YoungGC和MixedGC两种回收机制,分别处理新生代和老年代垃圾,其中MixedGC采用并发标记周期(6个步骤)渐进式清理。虽然G1能有效降低STW时间,但仍可能在内存分配过快时触发FullGC。调优关键在于合理设置MaxGCPauseMillis和Initi

2026-07-28 15:28:15 428

原创 Java虚拟机:CMS垃圾回收器

本文深入解析了JVM中的CMS垃圾回收器。CMS以追求低延迟为目标,通过并发标记清除算法减少应用停顿时间,适用于响应敏感场景。文章详细介绍了CMS的6个工作阶段,其中仅初始标记和重新标记需要停顿,其他阶段均可与应用线程并发执行。针对CMS的内存碎片问题,提出了压缩整理解决方案。通过关键参数调优建议和实战日志分析,说明如何优化CMS性能。最后总结CMS优缺点:低停顿和快速响应的优势,但也存在CPU敏感、内存碎片等不足。随着G1回收器的成熟,CMS已在JDK9后被标记为废弃。

2026-07-27 17:51:14 414

原创 Java虚拟机:并行和并发回收器

文章摘要: 本文系统解析Java垃圾回收器(GC),聚焦新生代的ParNew与ParallelGC及其老年代搭档。ParNew是多线程并行回收器,专为配合CMS设计,追求低延迟;ParallelGC则侧重吞吐量优化,支持自适应调节参数。两者均采用复制算法但目标不同:ParNew适合Web服务等交互场景,ParallelGC适用于批处理等计算密集型任务。老年代ParallelOldGC与ParallelGC配对,通过标记-整理算法保障吞吐量。文中详解核心参数、日志解读及调优策略,强调在STW(Stop-The

2026-07-27 15:16:22 467

原创 Java虚拟机:串行回收器

本文详细解析了JVM中的串行回收器(SerialGC),包括其单线程、独占式的工作特点,以及新生代(采用复制算法)和老年代(采用标记-压缩算法)的实现机制。文章通过GC日志解读、参数配置和示例代码,展示了SerialGC的运行过程,并分析了其优缺点:实现简单高效、适合单CPU环境,但存在STW停顿长、无法利用多核等局限。SerialGC适用于Client模式、资源受限或小堆内存场景,但不适合实时应用和大内存系统。理解SerialGC有助于掌握GC设计思想,并为老系统性能优化提供基础。

2026-07-26 17:51:45 424

原创 Java虚拟机:对象复活、引用强度与Stop-The-World

摘要: 本文探讨了JVM中对象的生命周期与垃圾回收机制。对象通过GC Roots可达性分为可触及、可复活(通过finalize()自救)和不可触及三种状态,但依赖finalize()复活对象存在风险(Java 9已弃用)。引用类型分为强引用(不回收)、软引用(内存不足时回收,适合缓存)、弱引用(GC必回收)和虚引用(仅跟踪回收时机)。垃圾回收会引发Stop-The-World(STW)暂停,影响应用响应,可通过调整堆大小、选择低延迟收集器(如G1)和优化新生代比例缓解。核心目标是在吞吐量与低停顿间取得平衡,

2026-07-26 15:33:15 349

原创 Java虚拟机:垃圾回收算法

垃圾回收通过可达性分析判断对象存活状态,核心算法包括引用计数法(已淘汰)、标记清除法(有内存碎片)、复制算法(高效但浪费空间)和标记压缩法(适合老年代)。JVM采用分代收集策略:新生代使用改进版复制算法(Eden+Survivor区),老年代采用标记压缩法,并通过卡表优化跨代引用检查。现代G1收集器引入分区算法,将堆划分为可独立回收的小区间以减少停顿时间。不同算法各有优劣,需根据对象生命周期特性选择,组合使用可提升整体回收效率。

2026-07-25 11:42:01 845

原创 Java虚拟机:非堆内存的参数设置

本文分析了JVM非堆内存的三大核心区域:元数据区替代永久代,默认无上限需设限;线程栈影响递归深度和并发数,需权衡设置;直接内存读写快但分配慢,适合高频访问场景。同时对比了Server和Client运行模式的特点及适用场景,建议生产环境使用Server模式。最后总结了关键参数配置,强调合理设置元数据区上限、线程栈大小和直接内存的重要性,以保障系统稳定性和性能。

2026-07-25 10:55:39 472

原创 Java虚拟机:堆的参数配置

JVM堆内存结构分为新生代(Eden区和Survivor区)、老年代和元空间(JDK1.8+)。关键配置参数包括-Xms/-Xmx设置堆大小,-Xmn调整新生代容量,SurvivorRatio和NewRatio控制区域比例。最佳实践建议初始堆与最大堆一致,新生代占堆1/3~1/4,并开启OOM时的堆转储功能。通过案例演示了不同配置对GC的影响,如新生代过小会导致频繁FullGC,合理配置可让对象在新生代完成生命周期。生产环境推荐配置需平衡各区域大小,减少动态调整开销,同时利用GC日志和内存分析工具优化性能。

2026-07-24 16:47:09 520

原创 Java虚拟机:常用参数

《JVM参数配置与调优指南》 本文系统介绍了JVM关键参数的配置方法及调优技巧。主要内容包括: 内存配置:详解堆内存(-Xms/-Xmx)、新生代(-Xmn)和元空间的参数设置,建议-Xms与-Xmx设为相同值以避免性能波动 GC日志配置:推荐组合使用PrintGCDetails、PrintGCDateStamps和Xloggc参数,并提供了GC日志的详细解读方法 系统参数查看:通过PrintCommandLineFlags可快速确认JVM实际配置 参数速查表:汇总了内存管理、垃圾回收等核心参数的推荐设置

2026-07-24 11:06:19 203

原创 Java虚拟机:识别方法区

本文系统梳理了Java虚拟机中方法区的演进历史,从JDK1.7的永久代(PermGen)到JDK1.8的元空间(Metaspace)实现。通过CGLib动态生成类的实战案例,演示了元空间溢出的发生机制及异常特征,结合VisualVM监控数据分析了内存耗尽过程。对比了不同JDK版本在方法区实现上的关键差异:位置(堆内存vs本地内存)、默认上限(64MB vs无限制)和字符串常量池迁移。最后提出解决方案:代码层面控制类生成、合理设置JVM参数(MaxMetaspaceSize必配)、使用诊断工具监控。核心结论是

2026-07-23 12:54:12 436

原创 Java虚拟机:操作数栈与栈上分配

本文深入解析了JVM操作数栈的工作原理与字节码执行机制。主要内容包括:1. 操作数栈的结构与功能:作为LIFO数据结构存储计算中间结果,深度在编译期确定;2. 字节码指令分类解析:涵盖常量入栈、变量存取、算术运算及对象方法调用等指令,通过示例代码展示执行流程;3. 经典陷阱分析:用字节码解释i=i++与i=++i的本质区别;4. JVM优化技术:重点讲解栈上分配与逃逸分析原理,通过实验验证其对性能的影响。文章通过具体字节码示例和栈状态图示,揭示了JVM底层执行细节,为理解Java程序运行机制提供实践指导。

2026-07-23 11:39:11 444

原创 Java虚拟机:栈帧中的局部变量表

本文通过实验发现Java方法递归深度与局部变量表大小的关系:含13个long变量的方法递归303次,而无变量方法可递归1098次。关键点包括:1. 局部变量表是栈帧核心组件,long/double占2个Slot;2. 栈帧大小决定递归深度,变量越多栈帧越大;3. 实例方法隐含this占用Slot;4. Slot复用可优化空间;5. 局部变量作为GC Root影响对象回收。建议在递归优化时减少局部变量,及时释放大对象引用,并通过工具分析字节码验证优化效果。

2026-07-22 14:22:41 423

原创 Java虚拟机:内存模型与核心机制

本文深入解析Java虚拟机(JVM)的内存结构和工作机制。主要内容包括:1) JVM整体架构和核心组件;2) 类加载子系统的工作流程;3) Java堆的分代管理;4) 栈帧结构和调用机制;5) 方法区存储内容;6) 堆、栈、方法区的协同工作;7) 其他重要组件如直接内存和本地方法栈;8) JVM参数设置实践。文章通过代码示例详细说明了StackOverflowError的产生原因,并对比了不同内存区域的特性和异常类型,帮助开发者建立完整的JVM知识体系。

2026-07-22 11:32:21 356

原创 Mysql架构揭秘:sql优化实战

本文系统性地剖析了MySQL在高并发场景下的优化实战策略,从“SQL执行层”与“数据库架构层”双维度展开。首先,基于Explain执行计划,深入解析了索引失效的各类陷阱,提炼出“最左前缀法则”、“避免索引列计算与隐式转换”、“范围条件靠后”以及“LIKE左模糊禁用”等9大黄金法则。其次,针对单一数据库瓶颈,提出引入Redis缓存层以提升响应速度,并构建主从复制架构实现读写分离以保障高可用。最后,针对海量数据激增,详细对比了“业务垂直拆分”与“水平分库分表”两种降维打击策略。文章从微观SQL调优到宏观架构设计

2026-07-19 16:57:59 358

原创 MySQL架构揭秘:EXPLAIN执行计划

MySQL执行计划深度解析:优化SQL查询的终极指南 摘要:执行计划(EXPLAIN)是MySQL性能优化的核心工具,它能揭示SQL查询的执行细节。通过分析id、select_type、type、key_len等关键字段,可以判断索引使用情况、查询顺序和性能瓶颈。重点指标包括:type(访问类型,从最优const到最差ALL)、key_len(判断组合索引使用情况)、Extra(包含Using filesort等关键提示)。优化策略包括:避免全表扫描、优化索引设计、消除临时表和文件排序、利用覆盖索引。掌握执

2026-07-19 15:51:56 444

原创 MySQL架构揭秘:慢查询日志详解

本文全面介绍了MySQL慢查询日志的配置与分析方法。主要内容包括:1. 慢查询日志的作用与核心参数说明;2. 开启日志的两种方式(临时/永久);3. 日志内容解析与关键指标分析;4. 日志文件的两种输出格式及工具使用;5. 常见问题解答与优化建议。慢查询日志是数据库性能调优的重要工具,通过合理配置和定期分析,可有效发现SQL性能瓶颈,建议生产环境中开启并设置1-2秒的合理阈值,同时记录未使用索引的查询,配合分析工具进行持续优化。

2026-07-18 16:27:46 275

原创 MySQL架构揭秘:锁机制

本文深入解析MySQL InnoDB存储引擎的锁机制,涵盖共享锁(S锁)与排他锁(X锁)的特性、表级意向锁的作用,以及行锁实质是索引记录锁的原理。详细介绍了Record Lock、Gap Lock和Next-Key Lock三种锁粒度,分析了不同SQL语句在RR隔离级别下的加锁规则,并指出索引对锁性能的关键影响。文章最后提供了锁冲突排查工具和优化建议,强调合理设计索引和选择隔离级别的重要性,帮助开发者在保证数据一致性的同时提升并发性能。

2026-07-18 14:47:17 397

原创 MySQL架构揭秘:MVCC解决读一致性问题

MVCC(多版本并发控制)是MySQL InnoDB在RR和RC隔离级别下解决读一致性问题的核心技术。其原理是:每行数据记录隐藏字段`DB_TRX_ID`(产生该版本的事务ID)和`DB_ROLL_PTR`(回滚指针),更新数据时不覆盖旧值,而是将旧版本写入undo log,通过回滚指针串联成版本链。查询时生成一致性视图Read View,包含未提交事务ID列表`m_ids`及其最小ID`min_trx_id`、下一个事务ID`max_trx_id`。查询从版本链最新记录开始,逐个比对`DB_TRX_ID`

2026-07-17 17:58:15 431

原创 MySQL架构揭秘:事务和读一致性问题

本文系统介绍了数据库事务的核心概念与应用。首先通过转账案例阐明了事务的必要性,即保证操作的原子性以避免数据不一致。随后详细解析了事务的四大特性(ACID):原子性、一致性、隔离性和持久性,并说明其底层通过undo log和redo log实现。重点分析了并发事务可能导致的三大问题:脏读(读取未提交数据)、不可重复读(同一事务内读取结果不一致)和幻读(结果集行数变化),并对比了它们的区别。最后介绍了四种隔离级别及其适用场景,建议MySQL默认的REPEATABLE READ级别能满足大多数业务需求,同时提醒需

2026-07-17 14:44:38 515

原创 MySQL架构揭秘:索引实战

摘要:本文深入解析MySQL索引实战要点。聚集索引的叶子节点存储完整行数据,主键推荐使用自增ID而非随机值。散列度低的字段(如性别)不宜建索引,易导致性能下降。联合索引遵循最左匹配原则,应将高散列度字段置左。覆盖索引可避免回表操作,提升查询效率。常见索引失效场景包括:对索引列使用函数、类型隐式转换、LIKE以%开头等。最佳实践强调适度建索引、注意字段顺序和优先使用覆盖索引。通过EXPLAIN分析执行计划,重点关注type、key和Extra等字段优化查询性能。

2026-07-16 16:27:36 533

原创 MySQL架构揭秘:索引存储原理深度解析

MySQL索引存储机制解析:从B+树结构到InnoDB/MyISAM实现差异 本文深入剖析MySQL索引的底层存储原理。关键发现: B+树采用叶子节点集中存储数据的结构设计,非叶子节点仅存索引键值,使3层B+树即可支撑千万级数据量(理论可达25.6亿条) InnoDB采用聚集索引,数据与主键索引绑定存储(.ibd文件),二级索引需回表查询;而MyISAM使用非聚集索引,索引(.MYI)与数据(.MYD)分离存储 存储设计差异导致InnoDB在点查和范围查询更优,MyISAM在纯索引查询时效率更高 实践建议:

2026-07-16 14:57:28 390

原创 Mysql架构揭秘:索引底层原理

本文深入解析了MySQL索引的核心原理与实现机制。文章通过图书馆查找书籍的类比,生动阐述了索引对查询性能的影响。重点剖析了索引数据结构从二叉查找树到B+树的演进过程,详细对比了B树与B+树的区别,解释了MySQL选择B+树作为默认索引结构的原因(更低的树高度、高效的磁盘I/O和范围查询)。同时指出索引的代价(存储开销和写入性能影响),并给出实践建议:应针对高频查询列建立索引,避免滥用,合理设计联合索引,定期分析执行计划。文章强调理解索引底层原理对数据库优化决策的重要性。

2026-07-15 17:36:51 486

原创 MySQL架构揭秘:存储引擎

本文深入解析MySQL五大存储引擎的核心特性与应用场景:InnoDB作为默认引擎支持事务、行锁和聚簇索引,是OLTP首选;MyISAM适合读多写少场景,支持压缩但缺乏事务;ARCHIVE引擎提供超高压缩比,专为数据归档设计;MEMORY引擎实现内存级速度但数据不持久。通过对比各引擎在事务、锁机制、索引类型等关键维度的差异,文章提供选型决策框架,建议优先选择InnoDB,特定场景下合理使用其他引擎以优化性能与存储效率。

2026-07-15 09:15:39 359

原创 Java并发编程:线程池参数设置原则

本文系统讲解了线程池参数设置的核心原则。通过数学推导和实际案例,提出"黄金三步法":1)根据80/20法则计算核心线程数;2)按响应时间要求确定队列容量;3)结合业务峰值计算最大线程数。特别强调要避免无界队列导致OOM,同时考虑CPU瓶颈对线程数的限制。文章还分析了不同拒绝策略的适用场景,指出参数设置应基于三个关键业务指标:任务量、任务耗时和响应时间要求。最终实现线程池既能应对常态负载,又可弹性应对流量峰值。

2026-06-03 20:54:33 322

原创 Java并发编程:Executors框架类深度解析

摘要: Java的Executors框架提供了三种核心线程池:1)newCachedThreadPool(弹性线程池,适合短期异步任务,自动回收空闲线程);2)newSingleThreadExecutor(单线程顺序执行任务,保证FIFO);3)newFixedThreadPool(固定线程数,适合稳定负载)。三者差异体现在线程数量、队列类型及适用场景(如高并发、顺序执行或均衡负载)。使用时需注意线程池关闭、合理选择类型及线程命名规范。Executors通过复用线程、统一管理提升性能,是优化并发编程的关键

2026-06-01 16:37:25 248

原创 Java并发编程: ThreadPoolExecutor核心原理与拒绝策略

本文深入解析Java线程池ThreadPoolExecutor的核心原理与实现机制。通过分析JDK1.8源码,从线程池的状态管理(RUNNING/SHUTDOWN/STOP等)、任务提交执行流程、Worker工作线程设计、任务获取与执行逻辑,到优雅关闭策略和四种拒绝策略,全面剖析线程池的工作机制。重点讲解了execute方法的三阶段处理逻辑、addWorker的线程创建过程、Worker类的精巧设计,以及shutdown与shutdownNow的本质区别。文章强调直接使用ThreadPoolExecutor

2026-06-01 13:36:48 478

原创 Java 并发编程:ThreadPoolExecutor 线程池

摘要: Java线程池通过线程复用和资源管控提升性能,核心类ThreadPoolExecutor提供灵活配置。关键参数包括核心/最大线程数、存活时间、阻塞队列及拒绝策略。任务执行流程优先使用核心线程,队列满后扩容至最大线程数,最后触发拒绝策略。生产环境建议手动配置队列容量,避免无界队列导致内存溢出,推荐自定义ThreadFactory和拒绝策略以优化监控与容错。线程池状态(RUNNING/SHUTDOWN/STOP等)通过原子变量ctl高效管理,开发者需理解其生命周期与转换逻辑。

2026-05-31 16:52:32 255

原创 Java并发编程:深入剖析 ArrayBlockingQueue

本文深入分析了Java并发包中的ArrayBlockingQueue实现原理。作为有界阻塞队列,它基于数组存储,使用ReentrantLock和Condition实现线程安全。核心内容包括:1)类图解析,展示其内部结构;2)构造器初始化过程;3)入队操作(offer/put)和出队操作(poll/take)的源码实现;4)条件变量与等待通知机制;5)与LinkedBlockingQueue的对比。重点解释了使用while循环而非if判断的原因(防止虚假唤醒),并给出了最佳实践建议。ArrayBlocking

2026-05-27 23:32:27 417

原创 Java并发编程 :深入剖析LinkedBlockingQueue

本文深入解析了Java并发包中的LinkedBlockingQueue实现原理。该队列采用两把锁分离设计(takeLock和putLock),分别控制出队和入队操作,实现真正的并行处理。内部通过单向链表存储元素,使用原子计数器保证线程安全,并配合条件变量(notEmpty和notFull)实现阻塞等待机制。文章详细剖析了offer/poll(非阻塞)和put/take(阻塞)等核心方法的实现细节,包括双重检查、条件唤醒等关键并发控制技术。特别强调了当队列状态变化时(空→非空或满→非满)的线程唤醒策略,以及通

2026-05-27 19:24:12 378

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除