Java ArrayList 从并行线程中删除不存在的对象

标签 java multithreading arraylist

最近我正在研究信号量和多线程,当我注意到数组列表发生了一些奇怪的事情时。更多详情:

我有一些带有单个私有(private) ArrayList 的类:

public class NewClass{

    private ArrayList list = new ArrayList();

    public void put(Object val){
        list.add(val);
    }

    public void del(Object val){
        list.remove(val);
    }
}

从某个线程中,我试图从中删除元素(在此之前不放置任何内容):

public class SomeClass {

    public static void main(String[] args) throws InterruptedException {
        new SomeClass();
    }

    public SomeClass() throws InterruptedException {
        Thread tr2 = new Thread() {
            @Override
            public void run() {
                NewClass nc = new NewClass();
                for (int i = 0; i < 100; i++) {
                        nc.del(i);
                }
            }
        };
        tr2.start();
    }
}

当线程开始工作时 - 我没有错误,没有异常等。同时,如果调试,我可以清楚地看到 list.indexOf(val);返回-1值-它实际上不存在,但被“删除”。谁能解释一下这是怎么回事?

最佳答案

如果您尝试使用remove(Object o) 方法删除列表中不存在的内容,则列表不会引发异常。它们返回 false。

关于Java ArrayList 从并行线程中删除不存在的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17592603/

相关文章:

java - 从同一个ArrayList中过滤出不同的ListView

java - 在 Java 中创建 map

java - 设置 TextView 的背景不起作用

Java 字符串/整数不会解析为枚举

c# - 跨线程集合控制

c# - .net多线程学习资料

java - 如何按频率而不是按字母顺序对字符串数组进行排序

java - Lock.tryLock超时异常的JUnit测试场景

java - 添加没有 Thread.sleep 的延迟和 while 循环什么都不做

java - 如何将实现接口(interface)的类添加到 ArrayList