线程安全的三种:
1. 不在线程之间共享可变的状态变量。
2. 将共享可变的状态变量修改为不可变的变量。
3. 在访问状态变量时使用同步。
线程安全实现方式:
1. 无状态对象一定是线程安全。如servlet不使用任何全局变量。
2. 原子性,导致原子性的场景:竞态条件如计数器,延迟初始化;应用原子性的场景是少量原子变量且不相关。
3.加锁机制,当在不变性条件中涉及到多个变量时,各个变量之间并不是彼此独立的,而是某个变量的值会对其它变量的值产生约束。
内置锁synchonized block来支持原子性,线程重入。