(六)JUC - java内存模型 JMM

a9960c5d05f0459f807046b273c16c8e.png

 

1. 计算机硬件存储体系 和 JMM 的关系

78433ce1a460446eb934f3e9333e6572.png

e0965d48e1e34d4986cabd25a6dc0e12.png

 

2. Java内存模型 Java Memory Model

ef23a8f50246469f94801ef3f72665a0.png

 

3. JMM 三大特性:

1)可见性

58093913c1ba49ffb5c008b336bb20a2.png

线程脏读

78aff3c5c18947c0a158bae0e585b9a4.png

2)原子性

3)有序性

指令重排序

57cb83ce35d94a8c8eef81ec35a4bbd0.png

 

4. 多线程对变量的读写过程

线程脏读

084d6aa5ce194c9eb341dc00a1cf5922.png

 

7dac067a5a94486494feef22e1041b8c.png

 

525729f884e34791849c4104dfd60796.png

135b7fc74ec448409befc2c4bb4bf3df.png

 

5. 多线程先行发生原则 happens-before 8条)

总原则:

4df3586791ca431c8bd1e06d44519a0b.png

案例说明:

e891b9095ecc4a97ac9880b2a3bd5871.png

 

8条原则:

b25d1ed8d7f44b728b394a470ee10ac7.png

1)次序规则

一个线程内,按照代码顺序,写于前面的操作先行发生于写于后面的操作。

加深说明:前一个操作的结果可以被后一个操作获取。

eg: 前面一个操作把变量x赋值为1,后面一个操作肯定知道x已经变成了1。

2)锁定规则

一个unlock操作先行发生于后面(时间先后)对同一把锁的lock操作

bdd59098360d42f0b1f79fdc29a341fa.png

3volatile变量规则

前面的写对后面(时间先后)的读是可见的。

4)传递规则

操作A先行发生于操作B,操作B先行发生于操作C => 操作A先行发生于操作C

5)线程启动规则(Thread Start Rule

Thread.start() 方法先行发生于此线程的每一个动作

6)线程中断规则(Thread Interruption Rule

通过Thread.interrupt()检测是否发生中断;

eg: 你要先调用interrupt()方法设置中断标志位,我才能检测到中断发生。

7)线程终止规则(Thread Termination Rule

线程中的所有操作都先行于对此线程的终止检测。

通过isAlive()检测线程是否已经终止执行。

8)对象终结规则(Finalizer Rule

一个对象的初始化完成(构造函数执行结束)先行发生于它的finalize()方法的开始。 “新=>旧”

对象没有完成初始化之前,是不能调用finalize()方法的。

(finalize()的目的:在对象被不可撤销的丢弃之前执行清理操作。)

 

happens-before 小总结:

7173b8c0538547eab907fadeafdfe263.png

 

happens-before案例分析:

54f7c1adef5c45c88b5b58bd4e4f5f5b.png

分析:

4e7359f9c18d4ef4b5e9b36a184945fb.png

解决:

1synchronized

3a50fd0921cd410eadf6eb1e5a168f99.png

 

2volatile

797f4252c64943ee98126d77ab2ce71d.png

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值