You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中synchronized方法的对象参数修改是否保证可见性?

关于synchronized锁下外部对象修改的可见性问题

针对你给出的代码场景,结论是:其他线程使用同一Example对象锁时,对x的修改是保证可见的。

具体解释:

  • Java的synchronized关键字通过锁的释放-获取动作建立happens-before关系。当一个线程释放锁时,它在持有锁期间的所有写操作(包括对传入的外部对象x的成员变量修改)都会被刷新到主内存;当另一个线程获取同一把锁时,会强制失效自己的工作内存,从主内存重新读取所有相关数据。
  • 不管修改的是当前Example对象的成员a,还是外部对象x的value,只要这些修改是在持有锁的方法内完成的,后续获取同一锁的线程就能看到这些修改。

需要注意的边界情况:如果有线程不通过这把Example对象锁,直接访问x.value,那无法保证可见性——可见性的保证只限于通过同一锁的释放-获取流程来传递。

内容的提问来源于stack exchange,提问作者Mohammad Karmi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 15:15:54