#8个原子操作
针对jvm主内存与工作内存的数据操作1
2
3
4
5
6
7
8lock----锁定
unlock----释放锁
read----读
write----写
load----加载
assign----赋值
use----使用
store----写入主内存
特例:
long、double、64为内存、在32为虚拟机中分两次操作、
load、store、read、write都不是源自操作
#8个规则:
1 | 1、不允许read、load、store、write单独出现 |
都挺好理解、计算机这个东西、没啥难度、
lock是做标记为int ++ –做锁标记位
#内存可见性
1、volatile
2、sychronized
3、final
#有序性
1、线程内表现为串行
#无序
1、指令重排序【使用volatile可以阻止指令重排序】
2、sychronized 同一个变量、在同一时刻、允许同一线程串行进入
3、编译器静态优化会打乱代码执行顺序
4、jvm动态优化会打乱代码执行顺序
5、硬件可以打乱执行顺序以优化其性能
#线程安全
1、不可变—final
2、绝对安全
3、相对安全
4、线程兼容
5、独立—对程序有害
#线程发展史
1、重量级、执行标记位 加sychronized的地方、我在内存中加一个标记为、标记该方法、该对象、我正在使用、你不能使用
2、偏向锁、object标记、Mark Word中偏向锁的标识
3、轻量级、reentranlock、线程中自建一个object标记、增加了trylock(times)、可队列执行锁方法、规则名aqs、
4、算法代替锁、设计思想是、假设没有竞争、竞争时候通过算法判断、cas、拿旧值和内存原值比较、一致则修改为新值