JMM 的三大特性
原子性 - 保证指令不会受到线程上下文切换的影响
可见性 - 保证指令不会受 cpu 缓存的影响
有序性 - 保证指令不会受 cpu 指令并行优化的影响
CPU缓存结构
synchronized与三大特性
那么以上几个方面在synchronized中是怎么体现的呢?
1.synchronized的原子性
通过上篇分析synchronized原理分析,synchronized通过悲观锁机制保证代码块中的代码的原子性,即要么全部执行完再由其他线程执行,要么都不执行;
2.synchronized的可见性
在JMM规范中,关于synchronized有如下规定,线程加锁时,必须清空工作内存中共享变量的值,从而使用共享变量时需要从主内存重新读取;线程在解锁时,需要把工作内存中最新的共享变量的值写入到主存,以此来保证共享变量的可见性。
3.synchronized的有序性
首先,synchronized并不能保证代码块中不会发生指令重排,但是我们知道,as-if-serial语义中不管怎么重排序(编译器和处理器为了提高并行度),单线程程序的执行结果都不能被改变。编译器和处理器无论如何优化,都必须遵守as-if-serial语义。同一时间只能被同一线程访问。那么也就是单线程执行的。所以,可以保证其有序性。
参考博文: https://blog.csdn.net/qinshuluye2013/article/details/121712308