目录
3.两个线程,for循环100次自增,得到的值为100~200之间.
6.汇编lock前缀(volatile缓存可见性实现原理):
1.概念:
是java虚拟机规范定义的,用来屏蔽掉java程序在各种不同的硬件和操作系统对内存的访问的差异,这样就可以实现java程序在各种不同的平台上都能达到内存访问的一致性。分为主内存+工作内存
2.volatile关键字
一旦一个共享变量(类的成员变量、类的静态成员变量)被volatile修饰之后,那么就具备了两层语义:
1)保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。
2)禁止进行指令重排序。
3.两个线程,for循环100次自增,得到的值为100~200之间.
4.JMM数据原子操作:
read(读取):从主内存中读取数据;
load(加载):将从主内存读取到的数据写入到工作内存;
use(使用):数据在工作内存中计算;
assign(赋值):将计算好的数据重新赋值到工作内存中;
store(存储):将数据从工作内存写入到主内存;
write(写入):将存储的变量值赋值给主内存中的变量;
lock(锁定):将主内存变量加锁,标识为线程独占状态;----这个是加在了store之前
unlock(解锁):将内存变量解锁,解锁后其他线程可以锁定该变量;----这个解锁发生在write之后
5.MESI缓存一致性协议:
当变量做出修改后,在从工作内存store-->write主内存这个过程中,会经过CPU总线(物理机制),会被CPU总线嗅探机制感知到,从而将其他工作内存中的变量失效,重新在read主内存中的变量.
6.汇编lock前缀(volatile缓存可见性实现原理):
当前工作内存的数据立即写会到系统主内存;
这个写回操作会引起在其他CPU里缓存了该变量数据无效;
缓存行加锁;