程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了向量与Collections.synchronizedList(ArrayList)大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决向量与Collections.synchronizedList(ArrayList)?

开发过程中遇到向量与Collections.synchronizedList(ArrayList)的问题如何解决?下面主要结合日常开发的经验,给出你关于向量与Collections.synchronizedList(ArrayList)的解决方法建议,希望对你解决向量与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,请注明来意。
标签: