我是靠谱客的博主 俊逸小海豚,这篇文章主要介绍ArrayList线程不安全的体现原理,现在分享给大家,希望可以做个参考。

我们从学习集合时就知道Arraylist线程不安全,但是它到底怎么线程不安全呢?
从源码中我们看到add方法

public boolean add(E e) {
        ensureCapacityInternal(size + 1);  // Increments modCount!!
        elementData[size++] = e;
        return true;
    }

判断列表的capacity容量是否足够,是否需要扩容,将元素添加进列表的元素数组里面。
使用多线程操作ArrayList会发现
在这里插入图片描述
在这里插入图片描述
这就很好的体现了其为什么线程不安全了
示例代码

package com.xql.ThradArrayList;

import java.util.ArrayList;
import java.util.List;

public class ThreadArraylist {
    public static void main(String[] args) throws InterruptedException {
        final List<Integer> list = new ArrayList<>();
        new Thread(new Runnable() {
            @Override
            public void run() {
                for (int x = 0; x < 1000;x++){
                    list.add(x);
                    try {
                        Thread.sleep(10);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();

        new Thread(new Runnable() {
            @Override
            public void run() {
                for (int x =1001;x < 2000;x++){
                    list.add(x);
                    try {
                        Thread.sleep(10);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();
        Thread.sleep(1000);
        for (int x=0;x < list.size();x++){
            System.out.println("第" + (x + 1) + "个元素为:" + list.get(x));
        }
    }
}

学艺不 精 望各位多多理解

最后

以上就是俊逸小海豚最近收集整理的关于ArrayList线程不安全的体现原理的全部内容,更多相关ArrayList线程不安全内容请搜索靠谱客的其他文章。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部