为什么多线程添加元素时Arraylist的大小不对?
threadCount = 100;
List<Object> list = new ArrayList<>();
for (int i = 0; i < threadCount; i++) {
Thread thread = new Thread(new MyThread(list, countDownLatch));
thread.start();
}
class MyThread implements Runnable {
// ......
@Override
public void run() {
for (int i = 0; i < 100; i++) {
list.add(new Object());
}
}
}
当这个程序完成后,列表的大小应该是 10000。实际上,大小可能是 9950、9965 或其他一些数字。为什么?
我知道为什么这个程序可能会引发 IndexOutofBoundsException
以及为什么其中有一些空值,但我就是不明白为什么大小不对。
最佳答案
I just do not understand why the size is wrong?
由于 ArrayList 不是线程安全的,因此两个线程可以在同一索引处添加。所以一个线程覆盖。
关于java - 为什么多线程添加元素时arraylist的大小不对?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40257978/