美文网首页
ArrayList 线程不安全Vector安全

ArrayList 线程不安全Vector安全

作者: sunyuan1125 | 来源:发表于2017-03-29 13:39 被阅读52次

1、

public boolean add(E e) {

ensureCapacityInternal(size+1);// Increments modCount!!

elementData[size++] = e;

return true;

}

ArrayList的元素添加实现方法中,分为两步,调整size,添加元素。

线程A添加一个元素时,元素已经放入,size未增加时,线程B也进行了元素的写入,两个线程放入了一个位置,最后两个线程都完成size+1,而元素添加了同一个位置,导致被覆盖,size添加了2,只添加了其中之一个元素,线程不安全。

2、Vector的添加元素方法,有synchronized将方法锁住,线程安全

public synchronized voidaddElement(Eobj) {

modCount++;

ensureCapacityHelper(elementCount+1);

elementData[elementCount++] = obj;

}

相关文章

网友评论

      本文标题:ArrayList 线程不安全Vector安全

      本文链接:https://www.haomeiwen.com/subject/xlbeottx.html