2 Star 65 Fork 54

柳诗妍 / Java-Interview-Advanced

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
78.md 1.41 KB
一键复制 编辑 原始数据 按行查看 历史
leelovejava 提交于 2020-04-13 11:03 . 第三季 网络安全

77、synchronized锁同时对原子性、可见性以及有序性的保证

原子性、可见性、有序性,三块东西,都重新从比较细节和底层的层面,都在硬件的级别去给大家说了一下,到底是怎么回事,为什么会发生这个问题,从底层的层面来说了一下,以及大体上有没有什么办法可以来解决这些问题

原子性,基本的赋值写操作都是可以保证原子性的,复杂的操作是无法保证原子性的

可见性,MESI协议、flush、refresh,配合起来,才可以解决可见性

有序性,三个层次,最后一个层次有4种重排(LoadLoad、StoreStore、LoadStore、StoreLoad)

synchronized关键字,同时可以保证原子性、可见性以及有序性的

原子性的层面而言,他加了以后,有一个加锁和释放锁的机制,加锁了之后,同一段代码就只有他可以执行了

可见性,可以保证可见性的,他会通过加入一些内存屏障,他在同步代码块对变量做的写操作,都会在释放锁的时候,全部强制执行flush操作,在进入同步代码块的时候,对变量的读操作,全部会强制执行refresh的操作

更新的数据,别的县城关只要进入代码块,就一定可以读到的

有序性,synchronized关键字,他会通过加各种各样的内存屏障,来保证说,解决LoadLoad、StoreStore等等重排序

Java
1
https://gitee.com/th_520/Java-Interview-Advanced.git
git@gitee.com:th_520/Java-Interview-Advanced.git
th_520
Java-Interview-Advanced
Java-Interview-Advanced
master

搜索帮助