Java并发:锁定效率

And*_*rey 6 java concurrency performance multithreading locking

我的程序有100个线程.

每个线程都这样做:

1)如果arrayList为空,则向其添加具有某些属性的元素

2)如果arrayList不为空,则遍历在arrayList中找到的元素,如果找到合适的元素(匹配某些属性),则获取它并删除arrayList

这里的问题是,当一个线程迭代通过arrayList时,其他99个线程正在等待arrayList上的锁.

如果我希望所有100个线程都能在无锁状态下工作,您会向我建议什么?所以他们都有工作要做?

谢谢

The*_*Don 2

您是否看过共享与独占锁定吗?您可以在列表上使用共享锁,然后在列表元素上使用“已删除”属性。除了您拥有的任何其他查询之外,您用于检查列表元素的谓词还需要确保该元素没有被标记为“已删除” - 另外,由于潜在的读写冲突,您需要锁定每个元素穿越。然后定期获取列表上的独占锁以真正执行删除。

读锁允许列表上的大量并发。列表中每个元素上的独占锁并不那么好,但是您需要强制内存模型将“已删除”标志更新到每个线程,因此没有办法解决这个问题。