1、变量
1.1 成员变量和静态变量
- 如果它们没有共享,则线程安全
- 如果它们被共享了,根据它们的状态是否能够改变,又分两种情况
- 如果只有读操作,则线程安全
- 如果有读写操作,则这段代码是临界区,需要考虑线程安全
1.2 局部变量
- 局部变量是线程安全的
- 但局部变量引用的对象则未必
- 如果该对象没有逃离方法的作用访问,它是线程安全的
- 如果该对象逃离方法的作用范围,需要考虑线程安全
2、常见线程安全类
String
Integer等包装类
StringBuffer
Random
Vector
Hashtable
java.util.concurrent 包下的类
这里说它们是线程安全的是指,多个线程调用它们同一个实例的某个方法时,是线程安全的。
- 它们的每个方法是原子的
- 但它们多个方法的组合不是原子的
3、不可变类
String、Integer 等都是不可变类,因为其内部的状态不可以改变,因此它们的方法都是线程安全的