线程安全与线程不安全的区别

duwang0 2012-02-19

线程安全就是多线程访问时,采用了加锁机制(如synchronized),当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。
线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据

查看ArrayList和Vector的源码会发现,其实Vector跟ArrayList基本一样,只是把所有改变列表元素的方法和部分跟位置或变化有关系的查询方法加上了synchronized。
可以这样理解:
1、如果List不会被多线程并发访问,使用ArrayList就没有问题;
2、如果有多线程并发访问List,可以使用Vector,也可以使用ArrayList,并且自己对可能出现并发冲突的地方自行做synchronized处理。

举例:
  StringBuffer线程安全,StringBuilder线程不安全
  Vector线程安全,        ArrayList线程不安全
  HashTable线程安全, HashMap线程不安全的

相关推荐