JMM——内存模型

多线程下读写规则,保证各种性质。
1.原子性:
synchronized(){}
2.可见性:可读不可以写
3.有序性:指令重排问题
为什么发生?如何解决?

多线程中****指令重排会影响结果
单线程中不影响的
synchronized是重量级的,影响性能。
voliate关键字解决可见性问题;但是不能保证原子性;可以禁用指令重排。

JMM——内存模型_第1张图片
JMM——内存模型_第2张图片
在这里插入图片描述
JMM——内存模型_第3张图片
在这里插入图片描述
.join()或者.Alive()
或者interrupt()

但是voliate这么优秀,为什么还要synchronized

CAS:
Compare and swap(乐观锁)
底层是调用了一个Unsafe类,这个类必须通过反射来获取。

synchronized:悲观锁

乐观锁和悲观锁:

在这里插入图片描述

synchronized优化:
JMM——内存模型_第4张图片

你可能感兴趣的:(JVM)