我是靠谱客的博主 称心水池,最近开发中收集的这篇文章主要介绍CopyOnWriteArrayList,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

CopyOnWriteArrayList是ArrayList的一个线程安全的变体,即可在并发中使用。而它的可变操作都是通过对ArrayList中存储的数组通过一次新的复制来实现的。

   首先讲一下它的用处,如下面的代码:

  List<String> list =newArrayList<String>();
  list.add("4");
  list.add("5");
  list.add("6");
  Iterator<String>iter = list.iterator();
  while(iter.hasNext()){
   String o =iter.next();
   System.out.println(o);
   list.remove(o);//orlist.add("adf");等操作
  }

执行会跑出异常:java.util.ConcurrentModificationException

当然如果吧 list.remove(o);换成iter.remove();是没问题的!但是iter却没有add方法。

下面说一下如何使用CopyOnWriteArrayList在遍历集合过程中修改元素。代码如下

List<String> list =newCopyOnWriteArrayList<String>();
  list.add("4");
  list.add("5");
  list.add("6");
  Iterator<String>iter = list.iterator();
  while(iter.hasNext()){
   String o =iter.next();
   System.out.println(o);
     list.remove(o);//orlist.add("adf");等操作
  }

注:1.上面已经说过,CopyOnWriteArrayList操作是很消耗资源的,使用条件是,当集合中需要修改的元素数远小于集合大小时。

   2.因为CopyOnWriteArrayList在做迭代之前是做了一份“快照”,所以此时的iter是不可变的,也就是说如果在此遍历中调用iter.remove();会抛出异常:java.lang.UnsupportedOperationException。


最后

以上就是称心水池为你收集整理的CopyOnWriteArrayList的全部内容,希望文章能够帮你解决CopyOnWriteArrayList所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(62)

评论列表共有 0 条评论

立即
投稿
返回
顶部