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
网友评论