基本需求
- 有一组被轮询的数组,没有权重,都是平等的。
- 数据可以在任何时间增加或者删除,是动态的,要保证新增加的数据可以轮询到,删除的数据轮询不到。
- 线程安全
使用的关键类
- CopyOnWriteArrayList
线程安全的一个列表,适用于读多写少的情况(很适合轮询的场景)。
- AtomicInteger
线程安全的计数器。
具体实现,代码如下
public class DynamicRoundRobin<T> {
private final List<T> list=new CopyOnWriteArrayList<>();
private AtomicInteger pos=new AtomicInteger(0);
public void add(T t){
list.add(t);
}
public boolean remove(T t) {
return list.remove(t);
}
public int size