在Java中为什么矢量,必须同步?(Why vector in Java has to be syn

2019-10-28 15:34发布

我试图理解为什么在Java的矢量,必须同步。 只要我通过谷歌达成协议,他们表示,其同步,因为它的元素synchronized块的其他线程,当一个线程访问它访问。 但我真正想知道的是为什么它必须是? Java的应该有它留给谁正在访问它的人。 但是,为什么Java的强迫所有的人访问矢量使用同步数据结构? 我同意的人谁说的ArrayList可用于我的要求。 但我要说的是那是什么向量要给我吗?

感谢和问候,Rengasami Ramanujam

Answer 1:

历史。

Vector是JDK 1.0的一部分; ArrayList不是。 我们了解到,同步为默认意味着性能差,所以当Java集合API出来就被逆转。

您仍然可以选择你需要使用的方法收集任何同步java.util.Collections ,但它是你的选择。

你也应该知道,是一部分的集合java.util.concurrent包。 馆藏的同时访问肯定需要进行精心编排。



Answer 2:

但我要说的是那是什么向量要给我吗?

这是一个“传统”类。

除非特别需要同步的列表类, Vector给你没事的时候你正在编写新的代码。

但是, Vector是(仍然)有一个很好的理由。 这个理由是让你跑这是用JAVA写的1.0和Java 1.1中工作,或者对一些不包括Java集合框架的Java ME配置文件来运行老的Java代码。 而且它具有(仍)保持同步,因为如果他们改变了这一切,任何使用多线程的遗留代码Vector可以打破。



Answer 3:

下面这个例子显示,你仍然需要在应用程序代码中使用的同步。

// BROKEN CODE, needs external synchronization
 // only add an element if the vector is empty
 if(vector.isEmpty())
     vector.add(anElement);

为什么矢量? 取决于你在做什么

在内部,无论是ArrayList和Vector守住使用数组的内容。 你需要保持这个事实考虑,而在你的程序中使用两种。 当你插入一个元素ArrayList或载体,对象将需要的,如果它运行的空间来扩大其内部数组。 的矢量默认为加倍其阵列的大小,而该ArrayList 50%增加其阵列尺寸。 这取决于你如何使用这些类,你可能最终会采取一个大的性能损失,同时增加新的元素。 它总是最好设置对象的初始容量,以你的程序将需要最大容量。 通过精心设置的容量,可以省下以后调整内部数组所需要的处罚。 如果你不知道你有多少数据,但你知道它的增长速度,矢量并拥有微弱的优势,因为你可以设置的增值。



Answer 4:

你是不是被迫使用Vector你会比较好用ArrayList S以及。

如果你使用线程工作,你是高兴,如果它的同步。 如果您的应用程序不使用线程我会用的东西比更快的Vector



Answer 5:

制作矢量同步的仅仅是谁写的Java库决定实施它的人的方式。 既ArrayList和Vector在内部实现为阵列,都被动态地调整大小,但向量是具有capacityIncrement双当前数组大小的其中对于ArrayList的是一半的当前大小。 Vector是慢,你必须检查是另一个线程执行之前的任何其他线程访问它。

如果你需要一个同步的列表数据结构,最好使用synchronizedList(List list)从集合API。



Answer 6:

如果你想操作的整个序列同步,使用ArrayList。 同步个体经营者作为载体做,是不太安全。

如果不需要线程安全的操作,建议使用恩的ArrayList。



文章来源: Why vector in Java has to be synchronized?
标签: java vector