我是靠谱客的博主 俊逸小海豚,最近开发中收集的这篇文章主要介绍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线程不安全的体现原理所遇到的程序开发问题。

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

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

评论列表共有 0 条评论

立即
投稿
返回
顶部