第2章 线程安全性
文章目录
2.1 什么是线程安全性
当多个线程访问某个类时,这个类始终都能表现出正确的行为
2.2 原子性
2.2.1 竞态条件(Race Condition)
由于不恰当的执行时序而出现不正确的结果
- 最常见的竞态条件类型就是“先检查后执行(Check-Then-Act)”操作,即通过一个可能失效的观测结果来决定下一步的动作
复合操作
包含了一组必须以原子方式执行的操作以确保线程安全性
2.3 加锁机制
2.3.1 内置锁
同步代码块(Synchronized Block)。包括两部分:一个作为锁的对象引用,一个作为由这个锁保护的代码块。以关键字synchronized来修饰的方法就是一种横跨整个方法体的同步代码块,其中该同步代码块的锁就是方法调用所在的对象。静态的synchronized方法以Class对象作为锁。
2.3.2 重入
如果某个线程试图获得一个已经由它自己持有的锁,那么这个请求就会成功