二.多线程基础之 volatile

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 ,synchronized这些锁或者 , 使用原子类中的CAS锁来解决

经验分享 程序员 微信小程序 职场和发展