在 Java 中之所以要用 synchronized 来做同步,核心原因只有一个:保证多线程环境下的数据安全与程序正确性。
下面从“问题 → 原因 → 作用”三个层次说明。
在多线程程序中:
例如:
int count = 0;
void add() {
count++; // 非原子操作
}
count++ 实际包含三步:
如果多个线程同时执行,就可能出现:
这就是 线程安全问题。
synchronized 能把一段代码变成原子操作:
synchronized (this) {
count++;
}
同一时刻,只有一个线程能进入同步块。
线程对变量的修改,对其他线程立即可见。
避免线程看到“旧值”。
防止 JVM 或 CPU 的指令重排序破坏逻辑顺序。
多个线程竞争同一资源导致结果错误。
如:
例如:
可能出现:
✅ 满足以下任意一点通常就需要:
synchronized 是 重量级但安全 的方案ReentrantLockvolatile(仅可见性)ConcurrentHashMap)使用 synchronized,是为了在多线程环境中,防止数据竞争,保证程序结果正确、稳定、可预测。
如果你愿意,我也可以结合具体场景 / 源码 / 面试角度再讲一版。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。