Java的线程安全与非线程安全

作者: 大海 分类: Java 发布时间: 2015-09-25 19:37 ė1751 views 6Comments Off on Java的线程安全与非线程安全

所谓非线程安全就是当用多线程操作时会出现预期之外的情况

先举几个例子:

ArrayList,LinkedList是非线程安全的,Vector是线程安全的;

HashMap是非线程安全的,HashTable是线程安全的;

StringBuilder是非线程安全的,StringBuffer是线程安全的

如:使用多线程想想ArrayList中添加元素,那么非常有可能实际添加进入的对象个数,跟你期望的并不一样

而如果我们使用Vector那就不会出现这个情况,也就线程安全的了.

List<Object> list = new Vector<Object>();

 

在编写程序时究竟该如何选择呢?

非线程安全是指多线程操作同一个对象可能会出现问题。而线程安全则是多线程操作同一个对象不会有问题。

 

线程安全必须要使用很多synchronized关键字来同步控制,所以必然会导致性能的降低。

 

所以在使用的时候,如果是多个线程操作同一个对象,那么使用线程安全的Vector;否则,就使用效率更高的ArrayList。

 

但是,事情并没有这么简单, 非线程安全并不意味着不安全

当我的程序是多线程时我就必须使用Vector而不是ArrayList,这种想法是不正确的

当多个线程操作的并非同一个对象时,使用非线程安全的ArrayList是完全没有问题的.

 

线程安全的类应当封装了所有必要的同步操作,调用者无需额外的同步。

本文出自 纳百川,转载时请注明出处及相应链接。

本文永久链接: https://www.bicner.com/859.html

Ɣ回顶部