一、线程安全

  1、线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染

  2、Vector、HashTable、StringBuffer都是线程安全的

  3、线程安全是通过线程同步控制来实现的,也就是synchronized关键字,必然会导致性能的降低

二、非线程安全

  1、非线程安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据

  2、ArrayList、HashMap、StringBuilder都是非线程安全的

三、非线程安全!=不安全

  1、如果是每个线程中new一个ArrayList,而每个ArrayList都只在对应的这一个线程中使用,那么肯定是没问题的。

四、String、StringBuffer、StringBuilder

  1、String

    ①、String实现了三个接口:Serializable、Comparable<String>、CarSequence

  2、StringBuffer

  3、StringBuilder

    ①、StringBuilder只实现了两个接口Serializable、CharSequence,相比之下String的实例可以通过compareTo方法进行比较,其他两个不可以。

  4、运行速度

    ①、StringBuilder > StringBuffer > String

    ②、String最慢的原因:String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,Java中对String对象进行的操作实际上是一个不断创建新的对象并且将旧的对象回收的一个过程,所以执行速度很慢;但后两者的对象是变量,是可以更改的