深圳市光明区住房和建设局网站,吉安微信网站,企业163邮箱登录入口即化,wordpress 数据优化概述
Vector与ArrayLIst类似, 内部同样维护一个数组, Vector是线程安全的. 方法与ArrayList大体一致, 只是加上 synchronized 关键字, 保证线程安全, 下面就不具体分析源码了, 具体可以查看ArrayList中的源码分析.
Vector源码分析
1.主要字段 2.构造函数 3.增删改查 其他方法…概述
Vector与ArrayLIst类似, 内部同样维护一个数组, Vector是线程安全的. 方法与ArrayList大体一致, 只是加上 synchronized 关键字, 保证线程安全, 下面就不具体分析源码了, 具体可以查看ArrayList中的源码分析.
Vector源码分析
1.主要字段 2.构造函数 3.增删改查 其他方法大部分类似, 不再赘述, 下面看下扩容机制的函数: Vector与ArrayList的区别
Vector是线程安全的, ArrayList不是线程安全的, 这是最主要的ArrayList不可以设置扩展的容量, 默认1.5倍; Vector可以设置, 默认2倍ArrayList无参构造函数中初始量为0; Vector的无参构造函数初始容量为10
Vector与Collections.synchronizedList
Vector是java.util包中的一个类。 SynchronizedList是java.util.Collections中的一个静态内部类。
在多线程的场景中可以直接使用Vector类也可以使用Collections.synchronizedList(List list)方法来返回一个线程安全的List。
那么到底SynchronizedList和Vector有没有区别为什么java api要提供这两种线程安全的List的实现方式呢
以下看 synchronizedList 部分源码: 从代码中, 我们可以看出:
Vector使用同步方法实现, synchronizedList使用同步代码块实现两者的扩容数组容量方式不一样(两者在扩容方面的差别就是ArrayList和Vector的差别)
但是, SynchronizedList中 listlterator方法并没有做同步处理, 但是在Vector却对该方法加了方法锁. 所以, 在使用SynchronizedList进行遍历的时候要手动加锁. 但是之后的但是, 如果想要把LinkedList变成线程安全的, 那么我们可以将已有的LinkedList直接转成SynchronizedList, 而不用改变它的底层数据结构, 这一点是Vector无法做到的, 因为Vector底层结构是使用数组的, 这一点是无法更改的.
总结两者区别如下:
SynchronizedList有很好的扩展和兼容功能, 可以将所有的List子类转成线程安全的类使用SynchronizedList在遍历的时候要手动进行同步处理SynchronizedList可以指定锁对象