- 博客(51)
- 收藏
- 关注
原创 【踩坑记录 | 第二篇】Windows迁移到WSL2:一文理清Python、Node、Git 代理与前端访问
本文记录了 Windows 用户迁移到 WSL2 Ubuntu 开发环境时容易遇到的核心问题,包括 WSL2 与 Windows 的关系、/mnt/c 与 /home/user 的区别、Python 与 Node/npm 的安装位置、nvm 和系统级 Node 的取舍、Git 代理与环境变量代理的区别,以及 Windows 浏览器访问 WSL2 服务的原理。文章通过通用命令示例,解释了为什么项目应尽量放在 Linux 文件系统中、为什么不要混用 Windows npm、如何通过 nameserver 让 W
2026-05-07 16:23:40
482
15
原创 【开源经历 | 第二篇】维护者提出建议后,如何同步 Fork、更新分支并重新提交 PR?
本文分享了参与开源项目时处理PR更新的完整流程。作者从收到维护者修改建议开始,详细梳理了同步fork仓库、更新PR分支、解决rebase冲突、最小范围修改等关键步骤。重点包括:区分官方仓库与fork仓库的关系、使用rebase保持提交历史干净、解决冲突的正确方法、根据review建议做针对性修改等。文章通过真实案例演示了如何规范地进行开源协作,特别强调保持PR范围清晰、避免无关修改的重要性,为开源贡献者提供了实用的操作指南。
2026-05-07 11:23:24
610
7
原创 【开源经历 | 第一篇】参与开源需要掌握的Git和Github指令
本文分享了参与开源项目的完整Git协作流程,从fork项目到提交PR的详细步骤。关键环节包括:1)fork原项目到个人账号;2)clone到本地并配置upstream;3)创建独立分支开发;4)规范提交commit;5)push到个人仓库;6)创建PR时明确描述改动;7)同步上游更新;8)处理冲突。特别强调开发分支管理、commit规范、PR描述清晰的重要性,为开源新手提供了系统化的操作指南。
2026-05-03 22:19:05
702
15
原创 【踩坑记录 | 第一篇】微软商店无法使用时,如何手动安装 OpenAI Codex?附`.msix`文件系统错误解决方法
本文介绍了一种绕过微软商店手动安装OpenAI Codex的方法。当系统组件损坏导致微软商店和.msix安装包无法正常使用时,可通过store.rg-adguard.net获取Codex安装包,然后使用PowerShell的Add-AppxPackage命令直接安装。这种方法不依赖图形界面,在某些系统异常情况下比双击安装更可靠。文中详细说明了获取安装包的步骤和使用PowerShell安装的具体命令,为微软商店无法使用的用户提供了替代安装方案。
2026-04-24 13:41:55
11535
10
原创 【AI Agent | 第七篇】Skill的使用:将经验沉淀成可复用工作流
本文分享了作者在Agent项目中关于Skill使用的实践经验。Skill作为专项工作流说明,解决了重复沟通成本问题,将个人经验和偏好转化为可复用的流程。文章以写博客为例,展示了Skill如何固化写作风格、流程和输出规范。Skill通常包含描述、工作流、规则和参考模板等内容,采用分层加载机制优化性能。作者总结了命名规范、模板灵活性、输出目录、大纲确认和安全规则等关键细节,并指出重复性强、流程明确、有特定输出要求的工作流最适合沉淀为Skill。
2026-04-24 12:58:54
8393
17
原创 【AI Agent基础 | 第六篇】LLM多厂商接入:区分provider、protocol、base_url、adapter
本文总结了接入多厂商大模型时的核心概念区分,包括provider(厂商)、api/protocol(接口协议)、base_url(服务地址)和adapter(适配器代码)。通过清晰的层级划分,可以避免配置混乱,比如阿里百炼模型使用OpenAI兼容协议的典型场景。文章推荐将模型定义拆解为这四个维度,并提供了具体代码示例说明如何正确配置模型参数、选择适配器以及处理不同协议的请求格式。最后强调这种分层设计能更好地管理API密钥、日志统计和厂商扩展能力。
2026-04-24 12:12:25
6856
23
原创 【AI Agent基础 | 第五篇】简析MCP(模型上下文协议)
本文介绍了模型上下文协议(MCP)的概念及其核心架构。MCP是一种开放协议,旨在为大模型与外部数据源、工具和工作流提供标准化连接方式。其架构包含三个核心组件:MCPHost(用户入口)、MCPClient(连接桥梁)和MCPServer(能力提供端)。文章详细阐述了MCP的工作流程,包括初始化连接、请求处理、结果返回等步骤,并提供了代码示例说明具体实现方式。最后对比了MCP与FunctionCalling的区别,指出MCP更适合复杂系统接入场景,能更好地支撑多轮对话和组合调用。
2026-04-02 14:58:06
1863
6
原创 【MySQL | 第三篇】 MySQL索引详解
本文系统介绍了MySQL索引的核心概念、优缺点、底层实现原理及优化策略。索引通过B+树数据结构显著提升查询性能,其优点包括加速查询、保证数据唯一性和优化排序分组,但会占用额外空间并影响DML操作效率。重点解析了B+树特点、聚簇/非聚簇索引区别、主键/二级索引关系、覆盖索引机制及联合索引的最左前缀原则。同时总结了索引创建规范(如区分字段类型、联合索引排序)和防止失效的注意事项(如避免函数操作、模糊查询%前置等)。通过深入理解索引原理和优化技巧,可有效提升数据库查询性能。
2026-04-02 14:03:58
1831
3
原创 【MySQL | 第二篇】 MVCC的底层实现(多版本并发控制)
MVCC(多版本并发控制)是InnoDB实现非阻塞读的核心机制,通过快照读(不加锁读取历史版本)和当前读(加锁读取最新版本)两种方式实现读写并发。MVCC依赖隐藏字段(事务ID、回滚指针)、undo log和ReadView实现,其中ReadView根据隔离级别(RC/RR)在不同时机生成。写操作则采用锁机制(X锁、间隙锁等)保证一致性。MVCC仅支持RC和RR隔离级别,通过版本链解决不可重复读问题,而写写互斥通过锁机制自动处理。事务ID在首次写操作时分配,优化了只读事务的资源使用。
2026-03-26 13:16:11
2078
3
原创 【LeetCode | 第七篇】算法笔记
本文介绍了回溯算法在解决排列组合类问题中的应用,包括全排列、子集、电话号码字母组合、组合总和和括号生成五种典型问题。针对每种问题,文章提供了清晰的解题思路和Java实现代码,重点分析了回溯过程中的关键步骤:选择元素、递归构建、回溯撤销和剪枝优化。通过使用used数组、startIndex、level标记等技巧,有效避免了重复解的产生,提高了算法效率。文章还对比了不同解法的优缺点,如括号生成问题的暴力枚举与剪枝优化两种实现方式,展示了回溯算法在解决组合问题时的灵活性和强大功能。
2026-03-25 10:51:32
1611
2
原创 【MySQL | 第一篇】 深入理解三大日志(undo Redo Bin)
MySQL三大日志机制详解:UndoLog用于事务回滚和MVCC实现,记录数据修改前的版本;RedoLog确保事务持久性和崩溃恢复,记录数据页物理变更;BinLog用于主从复制和数据恢复,记录逻辑SQL变更。三者协同工作:事务执行时先写Undo和Redo,提交时通过两阶段提交(prepare→写BinLog→commit)保证数据一致性。崩溃恢复时根据日志状态判断:Redo标记commit直接重做,prepare状态需检查BinLog完整性,未提交事务则通过Undo回滚。不同日志各有侧重,共同构成MySQL
2026-03-25 10:39:40
2205
原创 【JchatMind智能体 | 第七天】引入知识库与 RAG
本文介绍了基于Agent视角的RAG(检索增强生成)技术实现。主要内容包括:1)RAG在Agent系统中的定位,将其视为普通工具而非特殊模式;2)知识库构建与检索两条主线,包括文档拆分、向量生成和存储入库流程;3)采用Markdown章节标题作为拆分单元的设计考量;4)仅对标题生成Embedding而非全文的优化策略;5)相似度搜索的核心实现逻辑。文章强调RAG作为系统能力,通过PostgreSQL+pgvector实现高效检索,最终以KnowledgeTool形式为Agent提供知识查询入口。整体呈现了一
2026-03-25 10:14:06
1996
原创 【JchatMind智能体 | 第六天】Agent Loop 的第一次落地
本文介绍了JChatMindV2智能代理系统的升级过程,重点阐述了如何从仅能聊天的V1版本演进为具备工具调用能力的V2版本。系统通过引入AgentLoop机制,将代理功能划分为Think决策、LLMs推理和Execute执行三大模块,形成完整的思考-执行循环。V2新增了工具管理、执行控制和状态维护等关键组件,采用手动接管工具调用流程的设计思路,确保系统拥有完整的执行轨迹记录和流程控制能力。文章详细解析了Think阶段的决策判断、Execute阶段的工具调用实现,以及将两者封装为step循环单元的设计理念,最
2026-03-19 15:39:07
2043
4
原创 【JUC并发 | 第九篇】Semaphore 和 CountDownLatch
本文深入解析Java并发工具Semaphore和CountDownLatch的底层实现原理。Semaphore基于AQS共享模式实现,通过state变量控制并发访问线程数,支持公平/非公平许可获取机制,核心方法acquire()和release()分别对应AQS的共享获取与释放逻辑。CountDownLatch同样基于AQS,通过state表示倒计时数,await()阻塞线程直至state归零,countDown()递减计数器并在归零时唤醒所有等待线程。两者关键区别在于:Semaphore用于资源并发控制且
2026-03-19 15:32:19
2054
原创 【JUC并发 | 第八篇】AQS的底层原理
本篇内容围绕 Java 并发包核心基础组件 AQS(抽象队列同步器)展开详解,同时关联 JUC 并发体系的 Future、CompletableFuture、线程池、JMM 内存模型等相关知识,核心阐述了 AQS 的核心定位、底层原理及不同并发工具基于 AQS 的实现差异。AQS 作为并发同步工具的底层框架与模板类,封装了通用核心逻辑,开发者仅需实现少量抽象方法即可自定义同步器,其底层以状态管理 + 队列调度 + 自旋 / 阻塞为核心,通过原子性同步状态(state)、CLH 双向等待队列、LockSupp
2026-03-17 11:25:00
2091
原创 【JchatMind智能体 | 第五天】实现带记忆的聊天功能
本文介绍了一个基于SpringAI的最小Agent实现项目JChatMindV1。该项目通过ChatClient调用大模型能力,使用ChatMemory维护对话上下文,实现基本的聊天功能。文章详细解析了Agent的核心组件:系统提示词、会话ID、状态管理等,并演示了多轮对话的记忆原理。测试案例验证了通过保存对话历史实现"记忆"的效果。该项目虽简单但包含了Agent的核心逻辑,为后续开发复杂Agent奠定了基础。文章强调模型本身无记忆,所有"记忆"都是通过维护上下文实现
2026-03-17 11:13:19
2003
原创 【LeetCode | 第六篇】算法笔记
本文总结了二叉树相关的常见算法题解,包括:1)二叉树展开为链表的递归和后序两种解法;2)通过前序和中序遍历构造二叉树的递归分治方法;3)路径总和III的前缀和哈希表和双重递归两种思路;4)二叉树的最近公共祖先递归解法;5)二叉树最大路径和的后序递归计算。每种解法均给出核心思路和关键代码实现,并标注了时间/空间复杂度。文章还提供了LeetCode系列算法笔记的优快云链接,方便读者查阅更多相关内容。
2026-03-15 10:07:37
1685
1
原创 【JchatMind智能体 | 第四天】Spring AI 集成与多模型支持
本文介绍了如何在SpringAI框架中统一管理多模型调用,实现Agent系统的工程化开发。通过SpringAI的ChatClient抽象层,开发者可以屏蔽不同模型厂商的API差异,专注于Agent行为设计。文章详细说明了接入SpringAI的三个步骤:使用BOM管理依赖、引入模型starter、配置APIKey参数。重点阐述了ChatClientRegistry机制如何实现模型的动态调度,使Agent能通过配置数据绑定任意模型。最终将各类模型转变为可配置、可切换的系统基础设施,实现了模型接入与Agent逻辑
2026-03-15 10:00:40
1682
原创 【JUC并发 | 第七篇】简析Future 和 CompletableFuture类
Java异步编程中的Future和CompletableFuture:Future接口用于管理异步任务执行结果,提供取消、状态查询和结果获取功能。CompletableFuture作为增强实现,提供四大优势:1)简化异步任务创建执行;2)支持链式调用实现任务流水线;3)提供多任务组合编排能力;4)内置灵活异常处理机制。特别推荐生产环境使用自定义线程池,避免共享线程池的资源竞争问题。这些特性共同解决了传统异步编程中任务协调复杂、阻塞等待和异常处理繁琐等痛点,显著提升开发效率和系统性能。
2026-03-15 09:52:50
1458
3
原创 【LeetCode | 第五篇】算法笔记
本文总结了二叉树和二叉搜索树的常见算法:1. 层序遍历采用BFS队列实现;2. 有序数组转BST使用递归分治;3. 验证BST可通过递归约束边界或中序检查升序;4. 查找第K小元素利用中序遍历特性;5. 右视图可通过BFS取每层末节点或DFS优先右子树实现。所有解法均提供Java代码实现,涵盖递归和迭代两种思路。
2026-03-14 10:10:07
1628
原创 【JchatMind智能体 | 第三天】数据模型设计
本文介绍了智能体(Agent)系统的数据模型设计,将持久化数据分为三类:Agent与对话状态、对话消息记录、系统知识库。详细设计了6个核心表:Agent表(固化配置)、ChatSession表(对话锚点)、ChatMessage表(全流程追溯)、KnowledgeBase表(知识边界)、Document表(原始资料)、ChunkBgeM3表(RAG载体)。重点阐述了各表的功能定位和相互关系,强调了配置与代码解耦、RAG"向量检索+文本参考"等设计原则。该数据模型设计为Agent系统提供了
2026-03-14 10:02:14
1777
原创 【JUC并发 | 第六篇】深入理解线程池
本文深入解析了Java线程池Executor框架的核心原理与最佳实践。主要内容包括:1)线程池的基本概念与优势(资源复用、性能提升、统一管理);2)线程池创建方式对比(直接构造 vs Executors工具类);3)关键参数详解(核心/最大线程数、队列类型、拒绝策略等);4)任务处理流程与线程生命周期;5)线程池大小配置公式(CPU/IO密集型场景);6)常见问题解决方案(线程命名、异常处理等)。特别强调生产环境应避免使用Executors内置线程池,推荐手动配置ThreadPoolExecutor,并给出
2026-03-14 09:53:45
2057
原创 【LeetCode | 第四篇】算法笔记
本文总结了二叉树相关算法题的解题思路,包括中序遍历、最大深度、翻转、对称性判断和直径计算。通过递归和迭代两种方法实现中序遍历,递归法按照左-根-右顺序访问节点,迭代法使用栈模拟递归过程。计算最大深度时,递归法取左右子树深度的较大值加1,迭代法则采用BFS按层计数。翻转二叉树通过交换左右子树实现,递归法和迭代法均可完成。判断对称二叉树需要验证左右子树镜像对称。计算直径则通过递归计算每个节点的左右子树深度之和,维护全局最大值。文章提供了详细的代码实现和思路分析,适合算法学习者参考。
2026-03-13 21:18:35
1624
原创 【JchatMind智能体 | 第二天】为何选 PostgreSQL + pgvector 而非 MySQL?
本文探讨了RAG智能体项目对数据库的特殊需求,重点对比了PostgreSQL+pgvector与MySQL在向量检索方面的优劣。文章指出,PostgreSQL+pgvector凭借原生向量支持、成熟生态、低运维复杂度等优势成为RAG项目的理想选择,而MySQL则因向量功能起步晚、生态薄弱等问题不适合初期项目。作者建议选择PostgreSQL+pgvector这一"一站式"解决方案,既能满足当前需求,又为后续扩展预留空间。
2026-03-13 21:11:36
1788
原创 【JchatMind智能体 | 第一天】从最原始的大模型调用开始
本文通过三个递进实验探讨了大模型交互的基本原理:1)单轮对话展示API请求/响应结构;2)多轮对话揭示上下文由系统维护而非模型记忆;3)工具调用演示模型决策与系统执行的协作机制。文章强调role字段的关键作用,指出多轮对话、工具调用和Agent循环本质都是围绕messages管理展开。通过最原始API调用,作者阐明Agent系统的底层逻辑:模型负责决策,系统负责执行和状态维护。这些基础认知为理解更复杂的Agent框架奠定了基础,揭示了AI交互系统"模型决策+系统执行"的核心协作模式。
2026-03-10 11:44:54
4166
原创 【AI Agent基础 | 第四篇】Spring AI 集成与多模型支持
本文介绍了如何通过SpringAI实现多模型统一管理,将大模型能力转化为可配置的基础设施。通过引入SpringAI框架,开发者可以摆脱处理不同模型API差异的重复工作,专注于Agent逻辑设计。具体实现分为三步:1)使用BOM管理依赖版本;2)添加模型starter依赖;3)配置APIKey和参数。系统采用注册表模式动态调度多个ChatClient,使Agent只需声明所需模型即可自动获取对应能力,实现模型与Agent行为的解耦。这种架构使模型成为可动态切换的系统基础设施,支持灵活扩展不同厂商的大模型服务。
2026-03-10 11:12:15
4029
原创 【AI Agent基础 | 第三篇】AI到底是怎么做事的?
AI Agent的核心价值在于任务推进能力,但大模型无法直接操作真实系统。关键在于明确分工:模型负责决策判断,系统负责执行落地。工具调用(Tool Calling)成为关键桥梁,通过预定义函数让AI间接影响系统。随着工具复杂度提升,MCP模式将工具抽象为可管理的能力,实现跨团队复用。当前已解决AI"能不能做"的问题,但"如何选对工具"仍需结合向量模型和RAG技术,这是实现智能Agent完整能力的关键闭环。(149字)
2026-03-07 14:47:11
3748
原创 【LeetCode | 第三篇】算法笔记
介绍了三种常见链表问题的解决方案。随机链表复制使用哈希表存储节点映射关系,通过两次遍历完成复制。排序链表提供两种方法:转换为数组排序重建,或采用归并排序递归处理。合并K个升序链表可采用逐一合并或分治法优化效率。LRU缓存则结合双向链表和哈希表,实现O(1)时间复杂度的存取操作,通过维护访问顺序和容量控制来管理缓存。每种方案均包含详细的实现思路和代码示例。
2026-03-05 10:20:29
1602
原创 【AI Agent基础 | 第二篇】从被动问答到主动推进任务的智能体
本文探讨了AI智能体(Agent)的概念及其在多步骤任务处理中的优势。文章首先区分了两种任务类型:一次性任务(无状态)和多步骤任务(有状态),指出传统AI模型仅适合处理前者。针对需要逐步推进的复杂任务,作者阐释了Agent的核心特征:具备目标意识、状态意识和行动意识,能够自主决策和动态调整流程。与固定流程的Workflow不同,Agent通过"思考-执行-反馈"的循环机制主动推进任务。文章还介绍了多智能体协作系统和Agentic设计理念,强调Agent需要结合真实世界工具才能有效完成任务
2026-03-05 10:09:11
3900
原创 【JUC并发 | 第五篇】JMM内存模型 和 volatile关键字
JMM(Java内存模型)是解决多线程并发问题的抽象规范,通过主内存和工作内存机制保证可见性、有序性和原子性。volatile关键字确保变量修改立即刷新到主内存,防止指令重排序但不保证原子性;synchronized通过监视器锁实现原子操作和内存屏障。典型应用如双重检查锁单例模式中,volatile防止对象初始化指令重排序。JMM提供多种原子性保障方式,包括synchronized、Lock和原子类。指令重排序虽能提升性能,但需通过内存屏障规避多线程风险。
2026-02-28 12:34:47
3992
原创 【AI Agent基础 | 第一篇】AI模型的能力边界与分类
AI模型能力边界与分类学习心得 本文分享了关于AI模型分类及能力边界的学习体会。文章指出,AI产品看似全能的表现实际是多种模型协同工作的结果,而非单一模型的能力。重点分析了三类主流AI模型:大语言模型(LLM)擅长文本理解与生成,多模态模型突破文本局限处理多种内容形式,向量模型则专注于语义关联分析。这三类模型各司其职,共同支撑起AI产品的多样化功能。最后提出模型协同与任务决策需要更高层级的Agent来实现,为后续学习埋下伏笔。文章以通俗易懂的方式帮助初学者建立对AI模型的正确认知框架。
2026-02-28 12:28:39
3006
原创 【LeetCode | 常用函数】Set类 HashMap类 String类
本文介绍了Java中Set、HashMap和String三大类的常用方法及其应用场景。Set部分对比了HashSet(无序去重)和TreeSet(有序去重)的核心方法;HashMap重点讲解了键值对操作和遍历方式;String详细列举了字符处理、查找匹配、截取分割等高频方法。每种方法都配有功能描述和典型应用场景说明,并附有完整示例代码。内容适用于算法解题和日常开发,帮助开发者快速掌握这些核心类的实用技巧。文章还提供了飞书文档链接供读者参考。
2026-02-27 17:29:55
2662
原创 【LeetCode | 第二篇】算法笔记
本文总结了LeetCode中常见的链表操作算法,包括: 合并两个有序链表的递归和迭代两种方法 两数相加的链表实现 删除链表倒数第N个节点的两次遍历和双指针解法 两两交换链表节点的迭代和递归实现 K个一组翻转链表的完整解决方案 每种算法都提供了清晰的思路描述和Java代码实现,特别强调了边界条件的处理和指针操作的注意事项。这些算法涵盖了链表操作的基本模式,对掌握链表数据结构具有重要参考价值。
2026-02-27 17:22:35
1828
原创 【JUC并发 | 第四篇】多线程 和 死锁
本文系统讲解了Java多线程编程的核心概念与应用。首先区分并发与并行的区别,分析多线程在单核/多核CPU上的价值。然后详细阐述线程调度方式、线程安全问题和死锁机制,包括死锁的四个必要条件、检测方法(jstack工具)及预防策略(破坏循环等待等)。最后介绍了synchronized、ReentrantLock等线程同步工具。文章兼顾理论与实践,为Java开发者提供了全面的多线程编程指导。
2026-02-26 11:59:24
2741
原创 【LeetCode | 常用函数】Collections工具类 和 List类
本文介绍了Java中Collection接口与Collections工具类的核心区别:Collection是集合框架的顶层接口,兼容有序和无序集合;Collections则是专门针对有序集合(List)的操作工具类。重点讲解了Collections工具类的高频方法,包括排序(sort/reverse)、查找(binarySearch/max/min)、填充替换(fill/replaceAll)和集合操作(newSetFromMap/emptyList)等,并提供了代码示例。同时详细说明了List接口的常用方
2026-02-26 11:45:01
2605
1
原创 【JUC并发 | 第三篇】简析ThreadLocal
ThreadLocal是Java中实现线程本地存储的机制,每个线程拥有独立的变量副本,避免多线程竞争。其核心原理是每个Thread类内部维护ThreadLocalMap(本质是Entry数组),ThreadLocal对象作为Key,变量副本作为Value。存在内存泄漏风险:Key是弱引用会被GC回收,但Value是强引用会持续占用内存,必须调用remove()清理。InheritableThreadLocal支持父子线程间传递数据,但不适用于线程池场景,此时需使用TransmittableThreadLoc
2026-02-10 21:32:42
2674
原创 【LeetCode | 第一篇】算法笔记
本文总结了链表常见问题的解题思路:1. 链表相交问题通过计算长度差并同步遍历寻找公共节点;2. 反转链表采用三指针法逐个反转节点;3. 回文链表使用快慢指针找中点并反转后半部分比较;4. 环形链表检测使用哈希表或快慢指针法;5. 找环入口则需在确认有环后重置指针寻找相遇点。每种方法都提供了详细步骤说明和代码实现,并强调了关键点和常见错误。这些算法均满足O(1)空间复杂度要求,适合面试准备和算法学习。
2026-02-09 13:53:55
1872
原创 【LeetCode | 常用函数】Arrays工具类 和 Collection接口
本文介绍了Java中Arrays工具类和Collection接口的核心用法。Arrays工具类提供数组排序(sort)、二分查找(binarySearch)、复制(copyOf)、填充(fill)等静态方法,适用于算法题中的数组操作。Collection作为List/Set的父接口,定义了add/remove/contains等通用集合操作方法,并详细演示了集合遍历、交集(retainAll)等场景。文章通过代码示例展示了数组与集合的相互转换技巧,并强调使用iterator安全删除元素的重要性。这些工
2026-02-07 12:05:20
1616
原创 【JUC并发 | 第二篇】ReentrantLock可重入锁
ReentrantLock是Java并发包中的可重入独占锁,相比synchronized更灵活强大,支持可中断、超时、公平/非公平锁等特性。两者主要区别在于:实现层面(JVM内置指令vsJava API)、锁释放方式(自动vs手动)、灵活度(ReentrantLock支持中断/超时/公平锁/多条件变量)、性能(高并发时ReentrantLock更优)。不可中断锁(如synchronized)会一直阻塞,而可中断锁(如lockInterruptibly())可响应中断请求。Java中断是协作式通知机制,
2026-02-06 11:56:44
1906
原创 【JUC并发 | 第一篇】深入理解synchronized关键字
synchronized是Java中的内置锁关键字,用于解决多线程资源竞争问题,保证线程互斥和内存可见性。它可修饰实例方法(锁当前对象)、静态方法(锁类对象)和代码块(锁指定对象),三者互不冲突。JDK1.6后引入锁升级机制(无锁→偏向锁→轻量级锁→重量级锁),通过MarkWord实现优化:偏向锁优化单线程重入,轻量级锁通过CAS自旋应对低竞争,重量级锁则依赖ObjectMonitor处理高竞争场景。synchronized具有可重入性,底层通过monitorenter/monitorexit指令或
2026-02-04 15:54:04
1911
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅