线程安全是多线程编程时的计算机程序代码中的一个概念。在拥有共享数据的多条线程并行执行的程序中,线程安全的代码会通过同步机制保证各个线程都可以正常且正确的执行,不会出现数据污染等意外情况。下面小编给大家介绍一下“线程安全的类有哪些线程安全的集合有哪些”

一、线程安全的类有哪些

1、不可变类

一个不可变的对象只要构建正确,其外部可见状态永远不会改变,永远也不会看到它处于不一致的状态。Java类库中大多数基本数值类如Integer、String和BigInteger都是原子性的,是不可变的,但Long和Double就不能保证其操作的原子性,可在声明变量的时候用volatile关键字。不可变对象上没有副作用,并且缓存不可变对象的引用总是安全的。一个不可变的对象的一个引用可以自由共享,而不用担心被引用的对象要被修改。

2、线程安全性类

线程安全性类的对象操作序列(读或写其公有字段以及调用其公有方法)都不会使该对象处于无效状态,即任何操作都不会违反该类的任何不可变量、前置条件或者后置条件。

3、有条件的线程安全类

有条件的线程安全类对于单独的操作可以是线程安全的,但是某些操作序列可能需要外部同步。为了保证其它线程不会在遍历的时候改变集合,进行迭代的线程应该确保它是独占性地访问集合以实现遍历的完整性。通常,独占性的访问是由对锁的同步机制保证的。

4、线程兼容类

线程兼容类不是线程安全的,但可以通过正确使用同步从而在并发环境中安全地使用。或用一个synchronized块包含每一个方法调用。

5、线程对立类

线程对立类是那些不管是否调用了外部同步都不能在并发使用时保证其安全的类。线程对立类很少见,当类修改静态数据,而静态数据会影响在其它线程中执行的其它类的行为时,通常会出现线程对立。

二、线程安全的集合有哪些

线程安全的集合有Vector、HashTable、Stack、ArrayBlockingQueue、ConcurrentHashMap、ConcurrentLinkedQueue等。Vector相当于ArrayList的翻版,是长度可变的数组;Hashtable是一个线程安全的集合,是单线程集合;等等。