当前位置: 首页 > news >正文

[ java 锁 - 04 - Integer o = 1 作为 锁的问题]

关于 Integer 作为锁对象的风险总结

核心结论

Integer(如 Integer lock = 1;)不适合作为 synchronized 的锁对象,因缓存复用和不可变性导致同步逻辑失效。

关键风险点

  1. 缓存复用导致锁冲突
    Java 对 [-128, 127] 范围内的 Integer 实现缓存池复用,不同变量(如 lockA = 1lockB = 1)会指向同一对象。
    → 后果:无关线程竞争同一把锁,破坏同步隔离性,降低并发效率。

  2. 不可变性引发锁替换
    Integer 是不可变类,若对锁对象重新赋值(如 lock = 2),会导致锁引用指向新对象。
    → 后果:同步块实际锁定的对象变化,多个线程可同时进入临界区,破坏线程安全。

final 修饰的局限性

  • finalfinal Integer lock = 1)可避免锁被替换,但无法解决缓存复用问题(仍可能与其他 Integer(1) 锁冲突)。

正确替代方案

使用 final Object 作为锁对象:

private final Object lock = new Object(); // 最优解
  • 唯一性new Object() 每次创建独立实例,无缓存复用,确保锁隔离。
  • 稳定性final 修饰保证引用不可修改,避免锁替换。

总结

Integer 因缓存机制和不可变性,存在锁冲突和替换风险,不适合作为锁对象。优先使用 final Object,从根源上避免同步问题。

http://www.hskmm.com/?act=detail&tid=39478

相关文章:

  • 2025年提升机厂家权威推荐榜:自动提升机、垂直提升机、斗式提升机、物料提升设备源头厂家精选
  • 2025年自动提升机厂家权威推荐榜单:专业制造与高效解决方案深度解析
  • [java 锁 - 03 重入写法 ]
  • 2025年包装机厂家权威推荐榜:自动包装机,半自动包装机,高效包装设备源头厂家精选与选购指南
  • golang: gin项目常用第三方库
  • ssh: 连接报错
  • python3: ubuntu上安装时报错: No module named zlib
  • OI 笑传 #22
  • 实用指南:Golang 中的字符串:常见错误和最佳实践
  • 2025年自动上料机厂家推荐排行榜:螺旋上料机,真空上料机,粉末上料机,颗粒上料机专业制造商精选指南
  • 接口幂等性
  • 20232315 2025-2026-1 《网络与系统攻防技术》实验三实验报告
  • 2025长沙1024程序员日:为开发者职业发展插上腾飞之翼
  • 2067C cf1500
  • 兼职日志-mysqlpython出图
  • 彻底清除浏览器缓存
  • 2025东莞包装机/自动包装机/半自动包装机厂家推荐垚林机械,精准高效耐用!
  • 使用pyautogui完成简单的游戏功能--皇室战争降杯
  • 2025 年 10 月系统门窗厂商榜单揭晓,专业系统智造与品牌保障口碑优选
  • 2025 年 10 月系统门窗厂商榜单揭晓,专业工艺制造与品牌保障口碑优选
  • 2025自动上料机厂家推荐东莞市垚林机械,高效输送精准控料!
  • Marchenko imaging-Kees Wapenaar-2014
  • MX-S 10-25 比赛总结
  • 7天阅读betaflight
  • 鱼书学习笔记
  • 2025年店铺装修设计施工一体化推荐榜单:服装店/化妆品店/火锅店/商场店/餐厅/健身房/美容美发/珠宝店等专业装修公司精选
  • 学弟模拟赛题解报告 - idle
  • XML-RPC接口安全漏洞分析与防护
  • InnoDB 存储引擎
  • 251025 模拟测 总结