Synchronized

为什么要有Synchronized

  • 在解决这个问题之前:我们得先了解一下整个java的内存模型也就是JMM

这里有个有趣的点:为什么有JMM的存在呢?

由于java语言本身是希望做跨平台支持的,但是面对的是各种硬件上的不统一,CPU,内存,访存方式上不一致,用的缓存协议不一致,从而多线程环境下不同的线程读取变量可能不统一,就需要人为去定义一个JAVA的内存模型了,主要为了便于跨平台上的并发是一致的

  • 一句话核心:为了更方便的跨平台而人为定义的java线程内存模型


[^1] 引用Java Guide图片

JMM内存模型工作方式:

  • 线程1可以读取主存当中的共享变量,并可以将其拷贝到线程一的本地内存当中,作为副本参与线程一的操作
  • 线程2可以把本地修改过的内存变量副本给同步到主内存当中去

这里一定要分清JVM和JMM,对于JMM来说主要是针对并发的模型,而JVM则是整个Java运行时的内存虚拟机


Synchronized
http://example.com/2025/05/20/interview/JUC/Synchronized/
作者
GENCO
发布于
2025年5月20日
许可协议