0基础学习网站建设wordpress静态文件放到cdn

张小明 2025/12/30 12:10:16
0基础学习网站建设,wordpress静态文件放到cdn,新做的网站怎样推广,网络营销工作内容是什么文章目录不得不了解的Java#xff1a;乐观锁与悲观锁详解 ?一、什么是乐观锁与悲观锁#xff1f;悲观锁#xff1a;像老股民一样谨慎乐观锁#xff1a;像年轻人一样自信二、乐观锁与悲观锁的区别三、如何在Java中实现乐观锁与悲观锁#xff1f;1. 悲观锁的实现示例代码乐观锁与悲观锁详解 ?一、什么是乐观锁与悲观锁悲观锁像老股民一样谨慎乐观锁像年轻人一样自信二、乐观锁与悲观锁的区别三、如何在Java中实现乐观锁与悲观锁1. 悲观锁的实现示例代码使用JPA实现悲观锁2. 乐观锁的实现示例代码使用JPA实现乐观锁四、乐观锁与悲观锁的选择1. 数据竞争激烈时悲观锁更安全示例代码银行转账中的悲观锁2. 数据读多写少时乐观锁更高效示例代码商品详情中的乐观锁五、常见误区与注意事项1. 锁级别越低越好示例代码设置事务隔离级别2. 版本号只能用整数3. 悲观锁一定会降低性能六、总结希望这篇长文能帮助你更好地理解乐观锁与悲观锁的区别与实现方式。如果还有疑问欢迎留言讨论 领取 | 1000 套高质量面试题大合集无套路闫工带你飞一把不得不了解的Java乐观锁与悲观锁详解 ?大家好我是闫工今天我们要聊一个非常有意思的话题——乐观锁与悲观锁。这俩“锁”虽然听起来像是武侠小说里的武器但在Java世界里它们可是解决并发问题的神器无论你是刚入行的小白还是已经摸爬滚打多年的资深工程师这个知识点都必须烂熟于心。毕竟在多线程编程的世界里“锁”就是你的安全带没有它你随时可能“翻车”。好了话不多说咱们马上进入正题一、什么是乐观锁与悲观锁在讲具体细节之前我得先让你明白乐观锁和悲观锁都是用来解决并发问题的机制。简单来说就是多个线程同时操作同一个资源时如何保证数据的一致性和正确性。悲观锁像老股民一样谨慎悲观锁的态度是“这世界上没有免费的午餐数据随时可能被修改我要提前占位。”它会在读取数据时就加上一个锁比如共享锁或排他锁防止其他线程在当前事务未提交前进行修改。这种锁机制的特点是独占性高、安全性强但也会导致并发性能较差。乐观锁像年轻人一样自信而乐观锁则相反它认为“数据被同时修改的概率很低我先干有问题再说。”乐观锁不会在读取时加锁而是假设其他线程也不会同时修改这个数据。如果提交时发现数据已经被修改过就回滚事务重新尝试。这种机制的特点是并发性能高、开销小但在写多于读的场景下可能效率较低。二、乐观锁与悲观锁的区别为了更直观地理解两者的区别我来画个表格对比一下特性悲观锁乐观锁加锁时机在读取时就加锁不加锁提交时检查冲突并发性能较低独占资源较高不阻塞其他线程适用场景事务时间长、数据竞争激烈读多写少的场景实现方式数据库锁如行锁、表锁版本号、时间戳等三、如何在Java中实现乐观锁与悲观锁接下来咱们来看看在Java中具体怎么实现这两种锁机制。1. 悲观锁的实现悲观锁最经典的实现方式是通过数据库的锁机制。比如在MySQL中可以通过SELECT ... FOR UPDATE语句来实现行锁。这样可以保证在事务提交前其他线程无法修改该数据。示例代码使用JPA实现悲观锁假设我们有一个用户表想在更新用户信息时加锁TransactionalpublicvoidupdateUser(Useruser){// 使用乐观锁的版本字段version进行更新StringsqlSELECT * FROM User WHERE id ? FOR UPDATE;UserexistingUserjdbcTemplate.queryForObject(sql,newObject[]{user.getId()},User.class);// 模拟业务逻辑修改用户信息existingUser.setName(user.getName());existingUser.setAge(user.getAge());StringupdateSqlUPDATE User SET name?, age?, version? WHERE id? AND version?;jdbcTemplate.update(updateSql,existingUser.getName(),existingUser.getAge(),existingUser.getVersion()1,existingUser.getId(),existingUser.getVersion());}注意虽然这里用了FOR UPDATE但实际上这属于悲观锁的实现方式。而后面的更新逻辑却用了乐观锁的思想基于版本号。这个例子只是为了说明两者的结合使用。2. 乐观锁的实现乐观锁的核心思想是“边干边看”常见的方式是通过版本号机制或时间戳机制来实现。每次更新数据时系统会检查当前版本是否与预期一致如果不一致则回滚事务。示例代码使用JPA实现乐观锁在Spring Data JPA中可以使用Version注解来自动管理版本号EntitypublicclassUser{IdprivateLongid;privateStringname;privateIntegerage;VersionprivateIntegerversion;}更新用户信息时JPA会自动生成类似以下的SQL语句UPDATEUserSETname?,age?,version?WHEREid?ANDversion?这样可以确保只有在版本号匹配的情况下才能更新数据。四、乐观锁与悲观锁的选择那么问题来了什么时候该用乐观锁什么时候该用悲观锁这个问题没有标准答案但有一些经验可以参考1. 数据竞争激烈时悲观锁更安全比如在银行转账场景中两个线程同时操作同一个账户如果使用乐观锁可能会导致ABA问题即数据被多次修改最终结果不一致。此时悲观锁能确保每次操作的原子性。示例代码银行转账中的悲观锁Transactional(isolationIsolation.SERIALIZABLE)publicvoidtransferMoney(LongfromId,LongtoId,BigDecimalamount){// 读取双方账户余额加锁AccountfromAccountaccountRepository.findByIdForUpdate(fromId);AccounttoAccountaccountRepository.findByIdForUpdate(toId);// 执行转账fromAccount.setBalance(fromAccount.getBalance().subtract(amount));toAccount.setBalance(toAccount.getBalance().add(amount));// 提交事务accountRepository.save(fromAccount);accountRepository.save(toAccount);}注意isolation Isolation.SERIALIZABLE表示使用最高的隔离级别确保所有操作都是串行化的。2. 数据读多写少时乐观锁更高效比如在电商系统的商品详情页大多数时间是读操作只有少数时候才会修改商品信息。此时乐观锁能极大提升并发性能。示例代码商品详情中的乐观锁EntitypublicclassProduct{IdprivateLongid;privateStringname;privateBigDecimalprice;VersionprivateIntegerversion;}ServicepublicclassProductService{TransactionalpublicvoidupdateProductPrice(Longid,BigDecimalnewPrice){// 读取商品信息不加锁ProductproductproductRepository.findById(id).orElseThrow(()-newRuntimeException(Product not found));// 模拟价格计算product.setPrice(newPrice);// 使用乐观锁更新productRepository.save(product);}}五、常见误区与注意事项在实际开发中很多人对乐观锁和悲观锁的理解存在误区。咱们一起来看看1. 锁级别越低越好不完全是锁级别比如Read Committed、Repeatable Read越高安全性越好但并发性能越差。需要根据业务场景权衡。示例代码设置事务隔离级别Transactional(isolationIsolation.READ_COMMITTED)publicvoidsomeMethod(){// 业务逻辑}2. 版本号只能用整数不也可以使用时间戳或其他唯一标识。比如EntitypublicclassUser{IdprivateLongid;privateStringname;VersionprivateTimestampversion;// 使用时间戳作为版本号}3. 悲观锁一定会降低性能不如果业务场景确实需要高并发下的数据一致性悲观锁可能是更好的选择。比如在秒杀系统中使用乐观锁可能会导致大量重复操作而悲观锁能有效减少这种情况。六、总结悲观锁适合数据竞争激烈、一致性要求高的场景。乐观锁适合读多写少的场景能提升并发性能。选择的关键点业务需求和数据特点而不是盲目追求某一种锁机制。希望这篇长文能帮助你更好地理解乐观锁与悲观锁的区别与实现方式。如果还有疑问欢迎留言讨论 领取 | 1000 套高质量面试题大合集无套路闫工带你飞一把成体系的面试题无论你是大佬还是小白都需要一套JAVA体系的面试题我已经上岸了你也想上岸吗闫工精心准备了程序准备面试想系统提升技术实力闫工精心整理了1000 套涵盖前端、后端、算法、数据库、操作系统、网络、设计模式等方向的面试真题 详细解析并附赠高频考点总结、简历模板、面经合集等实用资料✅ 覆盖大厂高频题型✅ 按知识点分类查漏补缺超方便✅ 持续更新助你拿下心仪 Offer免费领取 点击这里获取资料已帮助数千位开发者成功上岸下一个就是你✨
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

网站界面设计的主要内容南阳优化网站排名

reinstall系统重装工具:5分钟快速完成服务器系统安装的终极指南 【免费下载链接】reinstall 又一个一键重装脚本 项目地址: https://gitcode.com/GitHub_Trending/re/reinstall 还在为复杂的服务器系统重装而烦恼吗?传统方法需要手动下载镜像、配…

张小明 2025/12/29 1:30:02 网站建设

专业网站优化外包做网站要霸屏吗

3步搭建家庭游戏串流系统:Sunshine多设备并行配置终极指南 【免费下载链接】Sunshine Sunshine: Sunshine是一个自托管的游戏流媒体服务器,支持通过Moonlight在各种设备上进行低延迟的游戏串流。 项目地址: https://gitcode.com/GitHub_Trending/su/Su…

张小明 2025/12/29 1:29:28 网站建设

如何查询一个网站的icp记账公司

内卷可以说是 2025 年最火的一个词了。LZ 在很多程序员网站看到很多 Java 程序员的 2025 年度总结都是:Java 越来越卷了(手动狗头),前有几百万毕业生虎视眈眈,后有在职人员带头“摸鱼”占着坑位,加上疫情让…

张小明 2025/12/29 1:28:53 网站建设

99到家网站怎么做开发公司外包

导语 【免费下载链接】CapRL-3B 项目地址: https://ai.gitcode.com/InternLM/CapRL-3B InternLM团队推出的CapRL-3B以仅30亿参数实现了媲美720亿参数模型的图像理解能力,通过创新的可验证奖励强化学习技术,为边缘设备的高精度视觉任务提供了新可…

张小明 2025/12/29 1:28:20 网站建设

青海工程建设云网站长沙建设网站公司

Excalidraw 支持 LaTeX 公式吗?数学表达实测结果 在技术团队的日常协作中,我们常常面临一个尴尬场景:想在白板上写个简单的贝叶斯公式 $P(A|B) \frac{P(B|A)P(A)}{P(B)}$,却发现工具只支持纯文本或贴图。这种割裂感不仅打断思路&…

张小明 2025/12/29 1:27:46 网站建设

从零搭建企业网站网站 建设网站

Wan2.2-T2V-5B能否生成设备使用教学?降低学习成本 你有没有遇到过这样的场景:刚买回来的智能设备,说明书厚厚一本,全是文字和静态图,翻了半天还是不知道“长按哪个键三秒才能进入配对模式”?🤯 …

张小明 2025/12/29 1:27:12 网站建设