并发情况下删除集合中的元素

Posted codermark

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了并发情况下删除集合中的元素相关的知识,希望对你有一定的参考价值。

public class ListTest {

    public static void main(String[] args) {
        CountDownLatch downLatch = new CountDownLatch(10);
        List<String> list = new ArrayList<>();
        list.add("2");
        list.add("2");
        list.add("11");
        list.add("11");
        list.add("3");
        list.add("3");
        for (int i=0;i<10;i++){
            doTask(downLatch, list);
        }
    }

    private static void doTask(CountDownLatch downLatch, List<String> list) {
        try {
            for (int i = 0; i < 10; i++) {
                new Thread(() -> {
                    deleteItem(list);
                    downLatch.countDown();
                }).start();
            }
            downLatch.await();
            System.out.println(list);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static void deleteItem(List<String> list) {
        Lock lock = new ReentrantLock();
        Iterator<String> iterator = list.iterator();
        lock.lock();
        try {
            while (iterator.hasNext()) {
                String val = iterator.next();
                if (val.equals("2")) {
                    iterator.remove();
                }
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            lock.unlock();
        }

    }


}

 

以上是关于并发情况下删除集合中的元素的主要内容,如果未能解决你的问题,请参考以下文章

比较 C# 中的字符串片段并从集合中删除项目

如何从一个片段中删除数据,这些片段应该反映在google firebase中的其他片段中

集合foreach迭代时,边迭代边删除,只能使用迭代器删除,不能使用集合删除,否则会导致并发修改异常for-each和Iterator的选择

Swift新async/await并发中利用Task防止指定代码片段执行的数据竞争(Data Race)问题

Swift新async/await并发中利用Task防止指定代码片段执行的数据竞争(Data Race)问题

node.js如何删除数组子文档的元素?