小编mic*_*alg的帖子

如果其字段不是易失性的,那么外部同步的 ArrayList 线程是否安全?

让我们假设:

  1. 有一个 ArrayList
  2. 列表被多个线程访问。线程可以添加元素并遍历所有元素。
  3. 所有访问都是外部同步的。所以不可能两个线程同时访问列表。

查看 ArrayList 源代码,我们可以看到 size 和 elementData 字段不是可变的:

    transient Object[] elementData; // non-private to simplify nested class access

    private int size;
Run Code Online (Sandbox Code Playgroud)

另外,让我们看看 add 方法:

    /**
     * This helper method split out from add(E) to keep method
     * bytecode size under 35 (the -XX:MaxInlineSize default value),
     * which helps when add(E) is called in a C1-compiled loop.
     */
    private void add(E e, Object[] elementData, int s) {
        if (s == elementData.length)
            elementData = grow();
        elementData[s] = e; …
Run Code Online (Sandbox Code Playgroud)

java multithreading arraylist volatile

3
推荐指数
1
解决办法
129
查看次数

标签 统计

arraylist ×1

java ×1

multithreading ×1

volatile ×1