循环调度java迭代器

我有一个数组中的主机列表,表示可用于执行特定作业的服务器.目前,我只是通过列表查找和建立与主机的通信来检查它不忙.如果不是,我会派一份工作给它.这种方法往往意味着列表中的第一个主机往往会随着其他可用主机的负载不平衡而变得很热.

在伪代码

for (Host h : hosts) {

    //checkstatus
    if status == job accepted break;

}

我想在主机之间正确平衡这个负载,即第一次使用主机一次使用第二次该方法主机2.只是想知道最优雅的解决方案是?

谢谢
w ^

解决方法

您可以创建一种提供循环迭代的新类型的Iterable:
public class RoundRobin<T> implements Iterable<T> {
      private List<T> coll;

      public RoundRobin(List<T> coll) { this.coll = coll; }

      public Iterator<T> iterator() { 
         return new Iterator<T>() {
            private int index = 0;

            @Override
            public boolean hasNext() {
                return true;
            }

            @Override
            public T next() {
                T res = coll.get(index);
                index = (index + 1) % coll.size();
                return res;
            }

            @Override
            public void remove() {
                throw new UnsupportedOperationException();
            }

        };
    }
}

您需要将您的主机定义为RoundRobin< Host&gt ;. [FIXED基于Mirko的评论]

相关文章

最近看了一下学习资料,感觉进制转换其实还是挺有意思的,尤...
/*HashSet 基本操作 * --set:元素是无序的,存入和取出顺序不...
/*list 基本操作 * * List a=new List(); * 增 * a.add(inde...
/* * 内部类 * */ 1 class OutClass{ 2 //定义外部类的成员变...
集合的操作Iterator、Collection、Set和HashSet关系Iterator...
接口中常量的修饰关键字:public,static,final(常量)函数...