不积跬步无以至千里,后继才能薄发
在Java中或者说在Jvm实现中,线程安全是一个相对的概念,某个对象在单独使用某个操作时是线程安全的,但在某些操作顺序却不是线程安全,需要额外的同步。该节将介绍线程安全的概念和在Java中的实现。
final类型的基本类型,在初始化时,如果没有发生this引用逃逸正确地初始化,在以后的使用中值不会变更,是线程安全的;对象行为不会对自身状态变更的对象,所有的行为都不会对自身进行变更,如java.lang.String类,subString()、trim()等方法都是返回一个目标值而对自身的变量不进行变更,也是线程安全的。
不需要做任何额外的同步,在多线程环境中都能得到正确的结果的变量,实际上这种要求很严苛,因为就算是“线程安全”的类,在某些操作顺序中也会导致不正确的结果,而需要额外的同步块进行同步控制。
对象的单独调用时,是线程安全的,但是在一些特定的调用顺序中,需要额外的同步保证线程安全,如HashTable类
对象本身不是线程安全的,但是通过同步手段保证对象在并发中安全使用
无论是否使用了同步手段,都无法保证线程安全的代码