面试
大厂面试都是要往深里面讲,有次面腾讯还有网易,都是让我往深讲,基本原理就是不听,哈哈。
volitail介绍
实现了可见性,但是没有实现原子性,所以是线程不安全的。
其次怎么实现的可见性呢?
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/2856da6d237c3a023701fa86c7eb368f.png)
由于存在线程内存,所以线程修改完需要刷新到主内存里面,保证其他线程也能看到。
操作系统层实现
msi协议
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/c160269b4a4f6cfdccae7104003b360d.png)
m修改 s共享 i已失效
当share状态的时候,变成其他状态的时候会主动写回主线程,其他线程将变量失效。
防止指令重排序
就是操作系统会对指令进行相应的优化,指令顺序发生变化但是结果不变。
这个时候可能会导致代码顺序会发生先后顺序的变化。
线程安全的三个原则
可见性,原子性,有序性