Java CopyOnWriteArrayList 添加元素(如果不存在)

问题描述 投票:0回答:1

我有一个 CopyOnWriteArrayList 因为我的代码应该是线程安全的。 列表 friuts = new CopyOnWriteArrayList<>();

我不想在列表中有重复的水果,我不能使用 Set,因为我也想有插入顺序。我写了这段代码

public boolean add(String friut) {
    synchronized (friuts) {
        if (friuts.contains(friut)) {
            return false;
        }
        friuts.add(friut);
    }
    return true;
}

据我所知,CopyOnWriteArrayList 已经并发了。因此,在同步块中添加 CopyOnWriteArrayList.add 对我来说似乎不是一个好主意。还有其他更好的解决办法吗?

java multithreading concurrency
1个回答
0
投票

使用

addIfAbsent()
方法:

public boolean add(String friut) {
    friuts.addIfAbsent(friut);
}
© www.soinside.com 2019 - 2024. All rights reserved.