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 重入

如果某个线程试图获得一个已经由它自己持有的锁,那么这个请求就会成功