java - 为什么多线程添加元素时arraylist的大小不对?

标签 java arraylist concurrency

为什么多线程添加元素时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/

相关文章:

java - Android 设备选择器中的序列号/名称

java - 在java中检索列表中的行值(来自Postgresql)

javascript - 将字符串转换为数组数组

swift - 我们如何等待 HTTP 请求完成?

多线程与单线程的 Ruby 性能

Java + UDP + DatagramSocket : Why is a PortUnreachableException thrown, 当 UDP 被设计为无连接时?

java迭代器-为什么泛型类型是可选的

java <= 无法正常工作

java - 在 Java 中构建字符串的 ArrayList 就像在 Javascript 中一样简单

java - 如何为一系列任务设计执行引擎