医院网站建设意义公司营销网络

张小明 2026/1/13 0:38:36
医院网站建设意义,公司营销网络,去除页面标题的wordpress,世界500强企业2021文章目录一、锁的基本概念#xff1a;为什么需要锁#xff1f;二、锁的分类体系三、核心锁机制深度剖析1. 悲观锁 vs 乐观锁2. synchronized的锁升级过程3. 读写锁#xff08;ReadWriteLock#xff09;4. 自旋锁四、数据库锁机制1. 行锁 vs 表锁2. 间隙锁#xff08;Gap L…文章目录一、锁的基本概念为什么需要锁二、锁的分类体系三、核心锁机制深度剖析1. 悲观锁 vs 乐观锁2. synchronized的锁升级过程3. 读写锁ReadWriteLock4. 自旋锁四、数据库锁机制1. 行锁 vs 表锁2. 间隙锁Gap Lock与临键锁Next-Key Lock3. 意向锁五、分布式锁超越单机范畴1. 基于Redis的分布式锁2. 基于Zookeeper的分布式锁六、实战案例转账业务中的锁应用七、避坑指南与最佳实践八、总结参考文章大家好我是你们的技术老友科威舟今天给大家分享一下Java中的锁机制。技术干货满满一文带你了解Java中的锁。在并发编程的世界里锁是保障线程安全的重要工具。但面对琳琅满目的锁机制很多开发者都会感到困惑。今天我们将深入剖析Java中的各种锁机制带你打通并发编程的任督二脉。一、锁的基本概念为什么需要锁在多线程环境下多个线程同时访问共享资源会导致数据竞争问题。锁作为一种同步机制可以确保同一时间只有一个线程能够访问共享资源从而保证数据的一致性。可以把锁想象成卫生间钥匙当一个使用者拿到钥匙进入卫生间时其他人必须等待使用完毕后归还钥匙下一个人才能使用。这种机制避免了尴尬的撞车情况。二、锁的分类体系Java中的锁可以按照不同的维度进行分类让我们通过一个表格全面了解锁的家族体系分类维度锁类型典型实现特点锁的性质悲观锁synchronized, ReentrantLock认为会发生并发冲突先加锁再访问乐观锁CAS, AtomicInteger认为不会发生冲突先修改再检查锁的粒度表锁数据库表锁锁定整张表粒度粗行锁数据库行锁锁定特定行粒度细读写特性读写锁ReentrantReadWriteLock读共享写独占排它锁synchronized, ReentrantLock完全独占锁状态偏向锁synchronized优化偏向第一个访问线程轻量级锁synchronized优化CAS实现避免线程阻塞重量级锁synchronized最终形态基于操作系统互斥量等待机制自旋锁CAS自旋循环尝试获取锁范围意向锁数据库意向锁表明意图加行级锁三、核心锁机制深度剖析1. 悲观锁 vs 乐观锁悲观锁就像一位过度谨慎的管家总是假设最坏情况——认为每次访问共享资源时都会有其他线程修改数据。因此它在操作前总会先加锁。// 悲观锁示例 - synchronizedpublicsynchronizedvoidtransferMoney(Accountfrom,Accountto,doubleamount){// 转账逻辑from.withdraw(amount);to.deposit(amount);}乐观锁则像一位乐观的协调者假设操作期间不会发生冲突只在提交时检查数据是否被修改。// 乐观锁示例 - CASpublicclassOptimisticLockExample{privateAtomicIntegerbalancenewAtomicInteger(100);publicbooleanwithdraw(intamount){intcurrent;do{currentbalance.get();if(currentamount){returnfalse;}}while(!balance.compareAndSet(current,current-amount));returntrue;}}适用场景悲观锁适合写多读少的高冲突场景乐观锁适合读多写少的低冲突场景。2. synchronized的锁升级过程synchronized的优化过程就像职场新人的成长路径偏向锁新人期当只有一个线程访问时JVM会偏向这个线程后续访问无需同步操作。这就像部门里只有一个员工所有资源都优先给他使用。轻量级锁成长期当有轻微竞争时线程通过CAS操作尝试获取锁避免线程阻塞。如同几个同事协作通过简单沟通就能解决问题。重量级锁成熟期当竞争激烈时锁升级为重量级锁未获取到锁的线程会被阻塞。这就像重要项目需要正式会议和严格流程来协调资源。3. 读写锁ReadWriteLock读写锁采用了多读单写的策略非常适合读多写少的场景。publicclassReadWriteCache{privateMapString,ObjectcachenewHashMap();privateReadWriteLockrwLocknewReentrantReadWriteLock();publicObjectget(Stringkey){rwLock.readLock().lock();try{returncache.get(key);}finally{rwLock.readLock().unlock();}}publicvoidput(Stringkey,Objectvalue){rwLock.writeLock().lock();try{cache.put(key,value);}finally{rwLock.writeLock().unlock();}}}这种设计允许多个读线程同时访问但写线程独占访问大大提高了系统的并发性能。4. 自旋锁自旋锁的理念是如果锁的持有时间很短那么等待锁的线程稍作循环等待自旋可能比挂起更高效。就像等电梯时如果知道电梯马上就到我们会选择在门口等待自旋而不是回工位线程挂起。publicclassSpinLock{privateAtomicBooleanlockednewAtomicBoolean(false);publicvoidlock(){// 自旋等待while(!locked.compareAndSet(false,true)){// 自旋期间可以执行一些轻量级操作}}publicvoidunlock(){locked.set(false);}}但自旋锁要注意自旋时间过长会浪费CPU资源。四、数据库锁机制1. 行锁 vs 表锁行锁就像精确制导导弹只锁定需要的数据行其他行仍可正常访问。这提供了更好的并发性但管理开销较大。表锁则是范围轰炸直接锁定整张表管理简单但并发性差。实战场景在用户余额更新时使用行锁避免全表锁定影响其他用户操作。2. 间隙锁Gap Lock与临键锁Next-Key Lock间隙锁锁定索引记录之间的间隔防止幻读临键锁则是行锁间隙锁的组合。比如防止在事务执行过程中有其他插入操作在条件范围内添加新记录。3. 意向锁意向锁是一种声明式锁表示我打算在这个资源上加更细粒度的锁。这就像在会议室门口挂预定牌子表明后续会详细使用。五、分布式锁超越单机范畴在分布式系统中单机锁已无法满足需求我们需要分布式锁来协调多个节点。1. 基于Redis的分布式锁publicclassRedisDistributedLock{publicbooleantryLock(StringlockKey,StringrequestId,intexpireTime){returnredisTemplate.opsForValue().setIfAbsent(lockKey,requestId,expireTime,TimeUnit.SECONDS);}publicbooleanunlock(StringlockKey,StringrequestId){// 使用Lua脚本保证原子性Stringscriptif redis.call(get, KEYS[1]) ARGV[1] then return redis.call(del, KEYS[1]) else return 0 end;returnredisTemplate.execute(newDefaultRedisScriptLong(script,Long.class),Collections.singletonList(lockKey),requestId)1;}}2. 基于Zookeeper的分布式锁Zookeeper通过创建临时顺序节点实现公平的分布式锁像银行排队机一样保证先来后到。六、实战案例转账业务中的锁应用让我们通过一个完整的转账案例展示不同锁的应用ServicepublicclassTransferService{// 使用ReentrantLock保证账户操作的原子性privatefinalLocklocknewReentrantLock(true);// 公平锁Transactionalpublicbooleantransfer(Accountfrom,Accountto,BigDecimalamount){if(lock.tryLock()){try{// 检查余额是否充足if(from.getBalance().compareTo(amount)0){from.debit(amount);to.credit(amount);accountRepository.save(from);accountRepository.save(to);returntrue;}}finally{lock.unlock();}}returnfalse;}}在这个案例中我们结合了数据库事务、ReentrantLock和余额检查确保了转账操作的安全性和一致性。七、避坑指南与最佳实践死锁预防避免嵌套锁按固定顺序获取锁使用定时锁锁粒度尽量减小锁的粒度只锁定必要的代码块锁分离读写分离使用ReadWriteLock替代独占锁性能监控关注锁竞争情况避免不必要的锁升级八、总结Java的锁机制是一个庞大而精妙的体系从简单的synchronized到复杂的分布式锁每种锁都有其适用场景。合理选择和使用锁是构建高并发应用的关键。记住没有最好的锁只有最合适的锁。明智地选择锁策略让你的应用在并发场景下游刃有余参考文章https://developer.aliyun.com/article/1441144https://blog.csdn.net/weixin_44817884/article/details/136677898https://blog.csdn.net/u013738122/article/details/105474728https://m.php.cn/zh-tw/faq/556205.htmlhttps://docs.pingcode.com/baike/275423https://docs.pingcode.com/baike/390005https://blog.51cto.com/u_16175498/13407976希望这篇文章能帮助你更好地理解Java中的各种锁机制如有疑问欢迎留言讨论。更多技术干货欢迎关注微信公众号科威舟的AI笔记~【转载须知】转载请注明原文出处及作者信息
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

低多边形生成网站苏州集团网站设计开发

文章摘要 本文提出了医疗AI智能体的六大核心模块框架:感知、对话接口、交互系统、工具集成、记忆学习和推理。通过七种专业智能体类型的协同配合,构建安全、可解释且自适应的医疗AI系统,推动人工智能在医疗领域的深度应用。 原文PDF https://…

张小明 2026/1/4 5:02:01 网站建设

wordpress 首页导航代码专业关键词优化平台

270M参数撬动百亿终端市场:Gemma 3轻量模型如何重塑边缘AI格局 【免费下载链接】gemma-3-270m 项目地址: https://ai.gitcode.com/hf_mirrors/unsloth/gemma-3-270m 导语 谷歌Gemma 3 270M以2.7亿参数实现"手机25轮对话仅耗电0.75%"的突破性表现…

张小明 2026/1/12 21:50:51 网站建设

网站建设专员招聘网页制作的基本知识

Android智能代理评估新范式:动态基准环境如何重塑移动AI测试标准 【免费下载链接】androidgen-glm-4-9b 项目地址: https://ai.gitcode.com/zai-org/androidgen-glm-4-9b 在移动AI技术快速迭代的当下,传统评估方法正面临严峻挑战。如何准确衡量A…

张小明 2026/1/1 14:48:55 网站建设

网站做的图上传后字变得很模糊wordpress怎么加属性

第一章:VSCode集成Azure QDK的API文档概览Visual Studio Code(VSCode)作为现代开发者的主流编辑器,结合Azure Quantum Development Kit(QDK),为量子计算程序的编写、模拟与调试提供了强大支持。…

张小明 2026/1/2 23:05:46 网站建设

中国建设有限公司官网网站seo诊断的主要内容

dify智能体平台调用vLLM API实现毫秒级响应 在当前大模型应用快速落地的浪潮中,一个关键瓶颈逐渐浮出水面:如何让强大的语言模型不仅“能说话”,还能“说得好、说得快”?尤其是在企业级场景下,用户对AI服务的期望早已不…

张小明 2026/1/1 18:43:24 网站建设

重庆网站网站建设区总工会加强网站意识形态建设

AI视频增强实战指南:从基础原理到场景化应用 【免费下载链接】paper2gui Convert AI papers to GUI,Make it easy and convenient for everyone to use artificial intelligence technology。让每个人都简单方便的使用前沿人工智能技术 项目地址: http…

张小明 2026/1/11 10:40:49 网站建设