1.synchronized 锁的升级过程:
由于并发量不同,争抢的激烈程度不同出现锁的升级。
锁升级不可逆。
2.为什么要使用锁。
对共有资源的操作,因为对同一资源涉及多数据的复制,使用,回写等不能保证资源的原子性。
即围绕共有资源的原子性和有序性,可见性。
cup处理数据需要遵循
2.1JMM模型
(1)lock(锁定): 作用于主内存的变量,把一个变量标记为一条线程独占状态
(3)read(读取): 作用于主内存的变量,把一个变量值从主内存传输到线程的工作内存中, 以便随后的load动作使用
(4)load(载入): 作用于工作内存的变量,它把read操作从主内存中得到的变量值放入工作 内存的变量副本中
(5)use(使用): 作用于工作内存的变量,把工作内存中的一个变量值传递给执行引擎
(6)assign(赋值): 作用于工作内存的变量,它把一个从执行引擎接收到的值赋给工作内存 的变量
(7)store(存储): 作用于工作内存的变量,把工作内存中的一个变量的值传送到主内存中, 以便随后的write的操作
(8)write(写入): 作用于工作内存的变量,它把store操作从工作内存中的一个变量的值传送 到主内存的变量中
(2)unlock(解锁): 作用于主内存的变量,把一个处于锁定状态的变量释放出来,释放后的 变量才可以被其他线程锁定
2.2 MESI 缓存一致性协议
- 数据刷回主内存
- 行缓存
- 缓存一致性协议
- 内存屏障
- io总线风暴
2.3嗅探机制
每个处理器会通过嗅探器来监控总线上的数据来检查自己缓存内的数据是否过期,如果发现自己缓存行对应的地址被修改了,就会将此缓存行置为无效。 当处理器对此数据进行操作时,就会重新从主内存中读取数据到缓存行.
3.volatile
保障变量的可见性和禁止重排序,不能保证原子性。
可见性: 实现缓存一致性协议 重排序: 禁止重排序。volatile是保障缓存中的数据的可见性,如果线程已经开始操作赋值,无法修改。
标签:缓存,变量,synchronized,工作,并发,线程,内存,作用 From: https://www.cnblogs.com/dhdnm/p/16607400.html