如何自动检查一个数组列表是否包含一个元素?



假设,我们正在尝试向ArrayList添加几个元素。同时,在同一列表中搜索list.contains(givenElement)

那么,我们如何在不锁定整个list对象的情况下实现线程安全?换句话说,多个线程如何访问该列表并执行atomically操作?我想知道如何使用AtomicReference来实现这一点。

我可以创建一个AtomicReference变量,其中加载了list。但是,那么我如何在整个list上不执行compareAndSet()的情况下自动执行contains()操作?

请注意,我正在寻找解决方案,而不是使用线程安全的集合。

如果列表本身没有改变,那么你就不应该看到AtomicReference。

看起来你需要ReadWriteLock,允许多个线程同时检查列表,同时在列表更改期间锁定。

要检查它是否在列表中,您需要Lock readLock()并将其更改为Lock writeLock()

这种用法有很多例子。

在OP的评论之后:改变不仅仅是比较。

获取readLock,查看它是否包含在列表中,然后获取writeLock,如果必须将其添加到列表中。只有在需要更改时才获取writeLock。

最新更新