共享模型之管程

共享模型之管程

一、共享带来的问题

1.小故事

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.Java 的体现

在这里插入图片描述

3.问题分析

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.临界区 Critical Section

在这里插入图片描述
在这里插入图片描述

5.竞态条件 Race Condition

多个线程在临界区内执行,由于代码的执行序列不同而导致结果无法预测,称之为发生了竞态条件

二、synchronized 解决方案

1.应用之互斥

在这里插入图片描述

2.synchronized

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.思考

在这里插入图片描述
在这里插入图片描述

4.面向对象改进

在这里插入图片描述
在这里插入图片描述

三、方法上的 synchronized

1.语法

在这里插入图片描述

2.不加 synchronized 的方法

不加 synchronzied 的方法就好比不遵守规则的人,不去老实排队(好比翻窗户进去的)

3.所谓的“线程八锁”

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、变量的线程安全分析

1.成员变量和静态变量是否线程安全?

在这里插入图片描述

2.局部变量是否线程安全?

在这里插入图片描述

3.局部变量线程安全分析

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.常见线程安全类

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.实例分析

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

五、习题

1.卖票练习

在这里插入图片描述
在这里插入图片描述

2.转账练习

在这里插入图片描述
在这里插入图片描述

六、Monitor 概念

1.Java 对象头

以 32 位虚拟机为例
在这里插入图片描述
在这里插入图片描述
https://stackoverflow.com/questions/26357186/what-is-in-java-object-header

2.原理之 Monitor(锁)

在这里插入图片描述

3.synchronized 原理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.synchronized 原理进阶

轻量级锁

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

锁膨胀

在这里插入图片描述
在这里插入图片描述

自旋优化

在这里插入图片描述
在这里插入图片描述

偏向锁

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

锁消除

在这里插入图片描述
在这里插入图片描述

七、wait notify

1.小故事 - 为什么需要 wait

在这里插入图片描述

2.wait notify 原理

在这里插入图片描述

3.API 介绍

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

八、wait notify 的正确姿势

在这里插入图片描述

1.step 1

在这里插入图片描述
在这里插入图片描述

2.step 2

在这里插入图片描述
在这里插入图片描述

3.step 3

在这里插入图片描述
在这里插入图片描述

4.step 4

在这里插入图片描述

5.step 5

在这里插入图片描述
在这里插入图片描述

6. 模式之保护性暂停

定义

在这里插入图片描述

实现

在这里插入图片描述
在这里插入图片描述

应用

在这里插入图片描述

带超时版 GuardedObject

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

原理之 join

在这里插入图片描述
在这里插入图片描述

多任务版 GuardedObject

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7.异步模式之生产者/消费者

定义

在这里插入图片描述

实现

在这里插入图片描述
在这里插入图片描述

应用

在这里插入图片描述
在这里插入图片描述

九、Park & Unpark

1.基本使用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.原理之 park & unpark

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

十、重新理解线程状态转换

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

十一、多把锁

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

十二、活跃性

1.死锁

在这里插入图片描述
在这里插入图片描述

2.定位死锁

在这里插入图片描述
在这里插入图片描述

3.哲学家就餐问题

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

-------------------------------------------------------------------------
名称: 阿基米德
状态: cn.itcast.Chopstick@1540e19d (筷子1) 上的BLOCKED, 拥有者: 苏格拉底
总阻止数: 2, 总等待数: 1
堆栈跟踪:
cn.itcast.Philosopher.run(TestDinner.java:48)
- 已锁定 cn.itcast.Chopstick@6d6f6e28 (筷子5)
-------------------------------------------------------------------------
名称: 苏格拉底
状态: cn.itcast.Chopstick@677327b6 (筷子2) 上的BLOCKED, 拥有者: 柏拉图
总阻止数: 2, 总等待数: 1
堆栈跟踪:
cn.itcast.Philosopher.run(TestDinner.java:48)
- 已锁定 cn.itcast.Chopstick@1540e19d (筷子1)
-------------------------------------------------------------------------
名称: 柏拉图
状态: cn.itcast.Chopstick@14ae5a5 (筷子3) 上的BLOCKED, 拥有者: 亚里士多德
总阻止数: 2, 总等待数: 0
堆栈跟踪:
cn.itcast.Philosopher.run(TestDinner.java:48)
- 已锁定 cn.itcast.Chopstick@677327b6 (筷子2)
-------------------------------------------------------------------------
名称: 亚里士多德
状态: cn.itcast.Chopstick@7f31245a (筷子4) 上的BLOCKED, 拥有者: 赫拉克利特
总阻止数: 1, 总等待数: 1
堆栈跟踪:
cn.itcast.Philosopher.run(TestDinner.java:48)
- 已锁定 cn.itcast.Chopstick@14ae5a5 (筷子3)
-------------------------------------------------------------------------
名称: 赫拉克利特
状态: cn.itcast.Chopstick@6d6f6e28 (筷子5) 上的BLOCKED, 拥有者: 阿基米德
总阻止数: 2, 总等待数: 0
堆栈跟踪:
cn.itcast.Philosopher.run(TestDinner.java:48)
- 已锁定 cn.itcast.Chopstick@7f31245a (筷子4)

这种线程没有按预期结束,执行不下去的情况,归类为【活跃性】问题,除了死锁以外,还有活锁和饥饿者两种情况

4.活锁

在这里插入图片描述
在这里插入图片描述

5.饥饿

在这里插入图片描述
在这里插入图片描述

十三、ReentrantLock

在这里插入图片描述

1.可重入

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.可打断

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.锁超时

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.公平锁

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.条件变量

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.同步模式之顺序控制

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值