Vector & Collections.synchro

2019-02-21  本文已影响35人  大黑跟小白的日常

Vector简单使用

Vector也是一个类似于ArrayList的可变长度的数组类型,它的内部也是使用数组来存放数据对象的;

值得注意的是Vector与ArrayList使用上的唯一的区别是,Vector是线程安全的,即它的大部分方法都包含有关键字synchronized;

Arraylist在空间扩容方面,与Vector最大的不同就是,Vector增长是100%,ArrayList增长是50%;

因此,若对于单一线程的应用来说,最好使用ArrayList代替Vector,因为这样效率会快很多(类似的情况有StringBuffer与StringBuilder);

而在多线程程序中,为了保证数据的同步和一致性,可以使用Vector代替ArrayList实现同样的功能;

ArrayList 的 add 方法 中的 size++ 在多线程并发的情况下是线程 不安全的~!

所以ArrayList 的 size方法 返回的 size 的值是非同步增加的值,是不正确的~!

而Vector的add方法在方法申明上就加了线程安全锁~

所以elementCount++属于原子操作,所以size()获取的elementCount也是正确的

Collections打包封装非同步集合的工具

多次执行,不再出现线程干扰产生错误list.size()现象

由上可以看出,Collections的同步封装工具,保证了list的线程安全性,不过在多线中,并发的对象得是封装好的Collection

上一篇下一篇

猜你喜欢

热点阅读