并发容器List - CopyOnWriteArrayList

所有修改线程对底层数组进行复制。如果在集合上进行迭代的线程数超过修改线程数,这样的安排是很有用的。

旧的迭代器拥有一致的(可能过时的)视图,访问它无需任何同步开销。

读:

    public E get(int index) {
        return get(getArray(), index);
    }

修改:

    public E set(int index, E element) {
        final ReentrantLock lock = this.lock;
        lock.lock();
        try {
            Object[] elements = getArray();
            E oldValue = get(elements, index);

            if (oldValue != element) {
                int len = elements.length;
                Object[] newElements = Arrays.copyOf(elements, len);
                newElements[index] = element;
                setArray(newElements);
            } else {
                // Not quite a no-op; ensures volatile write semantics
                setArray(elements);
            }
            return oldValue;
        } finally {
            lock.unlock();
        }
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、基础知识:1、JVM、JRE和JDK的区别:JVM(Java Virtual Machine):java虚拟机...
    杀小贼阅读 7,048评论 0 4
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,805评论 1 32
  • 标签(空格分隔): Java集合框架 问题思考 什么是集合框架? 为什么用集合框架? 怎么用集合框架? 问题解决 ...
    outSiderYN阅读 3,907评论 0 13
  • 四、集合框架 1:String类:字符串(重点) (1)多个字符组成的一个序列,叫字符串。生活中很多数据的描述都采...
    佘大将军阅读 4,136评论 0 2
  • 一年一度的广西“壮族三月三”假期来了,今年与清明节假期并在一起,4月4日~4月8日为假期,共五天小长假。 2014...
    阿加莎聊心理成长阅读 3,505评论 6 6