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