正文
成员变量和静态变量是否线程安全?
- 若它们没被共享,则线程安全
- 若它们被共享,分两种情况讨论
- 若只有读操作,则线程安全
- 若有读写操作,则这段代码是临界区,需要考虑线程安全
局部变量是否线程安全?
- 局部变量是线程安全的
- 局部变量引用的对象则未必
- 如果对象没有逃离方法的作用范围,它是线程安全的
- 若对象逃离方法的作用范围(比如 return),需考虑线程安全的
常见线程安全类
- String
- Integer
- StringBuffer
- Random
- Vector
- Hashtable
- java.util.concurrent 包下的类(JDK 5 后新增 )
注意:这里的线程安全是指,多个线程调用它们同一个实例的某个方法时,是线程安全的。 虽然它们的每个方法原子的,但是它们多个方法组合不是原子的。