1.线程安全性

目录

 

1.什么是线程安全性

2.原子性

2.1竞态条件

2.2复合操作

3.加锁机制

3.1内置锁

3.2重入

4.用锁来保护状态

5.性能


 

  • 编写线程安全代码,核心在于:对共享及可变状态的访问进行管理

1.线程安全性

变量不共享,不可变,使用同步

  • Java中同步机制:synchronized、volatile、显示锁、原子变量

 

1.什么是线程安全性

1.线程安全性

  • 1.线程安全性
  • 无状态对象(既不包含任何域,也不包含对其他类中域的引用)一定是安全的。

 

2.原子性

2.1竞态条件

计算的正确性取决于多个线程交替执行的时序(靠运气)

  • 本质:基于一种可能失效的观察结果做出判断(先检查后执行)
  • 举例:延迟初始化

2.2复合操作

一组必须以原子方式执行的操作,以保证线程安全性。(例如:读取-修改-写入)

用来解决竞态条件问题。(例如,atomic包)

 

3.加锁机制

1.线程安全性

要保持状态的一致性,需要在单个原子操作中更新所有相关的状态变量

3.1内置锁

1.线程安全性

3.2重入

1.线程安全性

1.线程安全性

 

4.用锁来保护状态

 

5.性能

1.线程安全性

1.线程安全性