mad*_*n54 2 java multithreading arraylist thread-safety
考虑一个带有ArrayList引用的函数的for循环,并将一个对象添加到该ArrayList.我现在想并行执行每个函数调用.
如果我不关心添加对象的序列并且没有函数读取或操作任何ArrayList元素,那么ArrayList.add()方法线程是否安全?所以我只想确保在并行调用结束时将所有对象添加到列表中.
不,它不是线程安全的.使用包裹列表Collections.synchronizedList(),或在访问列表时使用显式同步.
ArrayList.add()不是线程安全的.即使您没有从其他线程中读取列表,也不应该依赖这个逻辑假设.这是以下定义ArrayList.add():
public boolean add(E e) {
ensureCapacity(size + 1);
elementData[size++] = e;
return true;
}
Run Code Online (Sandbox Code Playgroud)
作为在没有同步的情况下可能出现的问题的示例,size在添加所有元素之后该属性可能不一致.如果您稍后尝试获取元素数量,结果可能不正确.
| 归档时间: |
|
| 查看次数: |
7131 次 |
| 最近记录: |