我有一个在多个线程之间共享的字符串列表。每个线程必须:
- 访问列表(例如通过 getter 方法);
- 获取列表的大小;
- 在零和 list.size() 之间选择一个随机数 n;
- 从列表中提取偏移 n 处的元素;
- 从列表中删除提取的元素;
- “保存”列表,以便其他线程始终查看更新的列表
由于存在对可变共享对象(列表)的并发访问,因此我需要以线程安全的方式进行编码。每个线程必须将列表大小减一,因此每个其他线程访问都必须看到一个较短的列表。我的目的是避免一个线程可以看到另一个线程看到的相同列表,因为这样可能会提取两次相同的元素。
实现这一目标的最佳方法是什么?我在考虑 CopyOnWriteArrayList 但我不确定它的行为是否符合我的需要。
谢谢