二.多线程基础之 volatile(面向面试吐血总结)

并发复习笔记之第二章(多线程基础之 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 可见性 是什么,为什么可以保证可见性?

  1. 可见性的意思是当一个线程 修改一个共享变量时,另外一个线程能读到这个修改的值,能读到的原因是程序任何对该变量的访问均需要 从共享内存中获取,而对它的改变必须同步刷新回共享内存,它能保证所有线程对变量访问 的可见性。

2.4 volatile 能保证有序性吗? 如何保证的?

  1. volatile 通过,在volitaile 写操作的时候使用内存屏障避免了指令重排,从而保证了有序性

2.5 volitaile 可以保证原子性吗? 如何保证原子性?

不可以,可以使用 lock ,