1.线程安全性
目录
- 编写线程安全代码,核心在于:对共享及可变状态的访问进行管理
变量不共享,不可变,使用同步
- Java中同步机制:synchronized、volatile、显示锁、原子变量
1.什么是线程安全性
- 无状态对象(既不包含任何域,也不包含对其他类中域的引用)一定是安全的。
2.原子性
2.1竞态条件
计算的正确性取决于多个线程交替执行的时序(靠运气)
- 本质:基于一种可能失效的观察结果做出判断(先检查后执行)
- 举例:延迟初始化
2.2复合操作
一组必须以原子方式执行的操作,以保证线程安全性。(例如:读取-修改-写入)
用来解决竞态条件问题。(例如,atomic包)
3.加锁机制
要保持状态的一致性,需要在单个原子操作中更新所有相关的状态变量
3.1内置锁
3.2重入
4.用锁来保护状态