先来看 JMM
java memory model java 内存模型
主要围绕:原子性,可见性,有序性。
A B 线程交互 必须经过主内存,这就存在可见性问题,volatile就是解决可见性的
volatile会强制将数据刷新到主内存,并是工作内存失效。
1.对于生明了volatile的变量,进行写操作的时候,JVM会向处理器发送一条lock前缀的指令,
会把这个变量所有缓存行的数据刷新到主内存,
2.多处理器会保证缓存一致性,使工作内存失效,重新读取主内存内容。
synchronized:可重入锁,互斥性,可见性,
找到class文件 javap -v *.class
synchronized 底层使用的 moitor机制,进入对象之前 加锁,出来解锁。异常情况自动解锁(出队列)
网友评论