大佬教程收集整理的这篇文章主要介绍了向量与Collections.synchronizedList(ArrayList),大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
同步收集既浪费时间又危险。一个很简单的例子,为什么它们不好,是考虑两个线程在同一集合上同时运行一个循环:
int i = 0;
while (i < List.size())
{
if (testSomeCondition(List.get())) {
List.remove(i);
else
i++;
}
我们的列表可能是同步的(例如,Vector),并且此代码仍然可怕地中断。为什么?因为对size(),get(),remove()的单个调用是同步的,但是一个线程仍可以从列表中删除项目,而另一个线程对其进行迭代。换句话说,我们有一个竞争条件,使用同步集合并没有给我们带来任何好处。
为了解决这个问题,我们必须同步集合上的整个操作,或者使用Java 5并发锁来做到这一点。
synchronized (List) {
int i = 0;
while (i < List.size())
{
if (testSomeCondition(List.get())) {
List.remove(i);
else
i++;
}
}
现在,此代码块是线程安全的,因为一次只能有一个线程可以执行循环。现在,没有理由使用同步集合。我们可以使用ArrayList代替Vector,并节省所有同步调用的性能损失。
因此,请勿使用同步集合。如果发现自己有多个线程在同一个列表中,则需要保护列表中的操作,而不是单个调用。
向量是同步的,ArrayList是不同步的,但是我们可以通过来同步ArrayList
Collections.synchronizedList(aList)
,那么哪个会更好,更快地执行?
以上是大佬教程为你收集整理的向量与Collections.synchronizedList(ArrayList)全部内容,希望文章能够帮你解决向量与Collections.synchronizedList(ArrayList)所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。