并发实战
2022-11-09 18:13:44 0 举报
AI智能生成
并发的讲解和实战代码
作者其他创作
大纲/内容
第二章 线程安全性
第零节
一、理解
1)理解前提术语
1、共享
①什么是状态共享
2、可变
①什么是状态可变
3、状态
①什么是状态变量
②有哪四种状态变量
2)理解线程安全性
1、出现线程安全问题
①本质原因
②如何判断线程是否安全
2、三种解决线程安全问题的思路
3、java中的几种同步机制
第一节 线程安全性
一、定义
1)复杂的定义
2)困惑的定义
1、这些定义让人困惑的两个原因
2、如何定义线程安全,才不会困惑
3)理解前提
1、理解『正确性』
①什么是『正确性』
3)正确的定义
1、简易版
2、完全版
二、举例
1)因数分解 servlet
1、功能说明
2、代码举例
3、此 servlet 线程安全的原因
4、无状态对象,线程安全的原因
①只有局部变量
A、如何理解局部变量,不会产生线程安全性问题
②没有共享变量
A、如何理解无状态对象,没有共享状态?
③为什么说,多个线程访问同一个无状态对象,就好像访问不同的实例一样,也即好像没有访问共享的对象一样
第二节 原子性
一、新的需求
二、解决方案
1)叙述
2)代码
3)可能的错误
1、起初
2、过程
3、最后
4、错误原因
三、竞态条件
1)概念
1、什么是『竞态条件』
①概念
②特点
③解决思路
2、什么时候会出现『竞态条件』
3、为什么竞态条件,会带来线程安全性问题
2)分类
1、『先检查后执行』类型竞态条件
①为什么『先检查后执行』类型是竞态条件中最常见的
②本质
③举例(没有做思维导图,今后做)
现实生活中『先检查后执行』类型的竞态条件
延迟初始化中的『先检查后执行』类型的竞态条件
2、『读取-修改-写入』类型竞态条件(没有做思维导图,今后做)
3)存在的问题
执行时序、竞态条件与线程安全的关系
4)解决方案
1、解决『竞态条件』引起的线程安全性问题的『思路』
①思路叙述
②思路解释
A、为什么,要解决『竞态条件』问题,就要解决执行时序不确定的问题?而不是把多线程变为单线程?
B、使用什么方法,解决执行时序不正确的问题?
C、什么是正确的执行时序?
D、如何确保正确的执行时序
2、复合操作
①严谨地描述复合操作
②什么是复合操作?
③如何定义复合操作
A、方法一:加锁机制(下一节讲)
B、方法二:使用一个现有的原子变量类
a、代码
b、解释
c、结论
第三节 加锁机制
一、原子变量类的局限性
1)当前的原子变量类,使用情况?
2)当前的原子变量类,存在的问题?
二、带有缓存的因式分解servlet
1)目的
2)如何实现
1、思路
3)疑问
0 条评论
下一页