并发复习笔记之第二章(多线程基础之 volitaile)
想看后续请持续关注
以下来源有书籍 深入理解 JVM 虚拟机,java 并发编程的艺术,深入浅出多线程,阿里巴巴技术手册以及一些公众号 CS-Notes,JavaGuide,以及一些大厂高频面试题吐血总结,以及狂神说视频笔记,目的在于通过问题来复习整个多线程,已下是全部章节,觉得不错点个赞评论收藏三连一下,您的鼓励就是我继续创作的最大动力!!!!
2 多线程基础之 volatile 以及 JMM
此处自己看一下内存模型图然后理解后再学习下面的问题
2.1 JVM 内存模型
Java的并发采用的是共享内存模型, 会遇到的两个问题是线程之间如何通信及线程之间如何同步,Java内存模型是不存在的东西,概念!约定!
2.1 volatile 的作用是什么
当写一个volatile变量时,JMM会把该线程本地内存中的变量强制刷新到主内存中去,Java模型确保所有线程看到这个变量的值是一致的。
2.2 volatile 可以保证线程安全吗,为什么?
1.想要线程安全必须保证原子性,可见性,有序性。而volatile只能保证可见性和有序性
2.3 volatile 可见性 是什么,为什么可以保证可见性?
- 可见性的意思是当一个线程 修改一个共享变量时,另外一个线程能读到这个修改的值,能读到的原因是程序任何对该变量的访问均需要 从共享内存中获取,而对它的改变必须同步刷新回共享内存,它能保证所有线程对变量访问 的可见性。
2.4 volatile 能保证有序性吗? 如何保证的?
- volatile 通过,在volitaile 写操作的时候使用内存屏障避免了指令重排,从而保证了有序性
2.5 volitaile 可以保证原子性吗? 如何保证原子性?
不可以,可以使用 lock ,synchronized这些锁或者 , 使用原子类中的CAS锁来解决