概述
我们从学习集合时就知道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线程不安全的体现原理所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复