服务器线程安全的五种类型
线程安全性的分类方法包括:不可变、线程安全、有条件线程安全、线程兼容和线程对立。只要明确地记录下线程安全特性,那么是否使用这种系统都没关系。这种系统有其局限性 ——各类之间的界线不是百分之百地明确,而且有些情况它没照顾到;但是,这套系统是一个很好的起点。这种分类系统的核心是调用者是否可以或者必须用外部同步包围操作(或者一系列操作)。下面几节分别描述了线程安全性的这五种类别。
(一)不可变类
一个不可变的对象只要构建正确, 其外部可见状态永远不会改变, 永远也不会看到它处于不一致的状态。
Java 类库中大多数基本数值类如Integer、String 和BigInteger 都是原子性的、不可变的, 但Long 和Double 就不能保证其操作的原子性, 可在声明变量的时候用volatile 关键字。不可变对象上没有副作用, 并且缓存不可变对象的引用总是安全的。一个不可变的对象的一个引用可以自由共享,而不用担心被引用的对象要被修改。
(二)线程安全性类
线程安全性类的对象操作序列( 读或写其公有字段以及调用其公有方法) 都不会使该对象处于无效状态, 即任何操作都不会违反该类的任何不可变量、前置条件或者后置条件。
(三)有条件的线程安全类
有条件的线程安全类对于单独的操作可以是线程安全的, 但是某些操作序列可能需要外部同步。为了保证其它线程不会在遍历的时候改变集合, 进行迭代的线程应该确保它是独占性地访问集合以实现遍历的完整性。通常, 独占性的访问是由对锁的同步机制保证的。
(四)线程兼容类
线程兼容类不是线程安全的, 但可以通过正确使用同步从而在并发环境中安全地使用。或用一个synchronized块包含每一个方法调用。
(五)线程对立类
不管是否调用了外部同步,有些类都不能在并发使用中保证其安全,而这样的类就叫做线程对立类。
线程对立类很少见, 只有当类修改静态数据、而静态数据对其它线程中执行的其它类的行为产生影响后, 才会出现线程对立。服务器租用联系电话:18300003210微信同号;技术QQ:404634181,24小时在线。