循环调度java迭代器

前端之家收集整理的这篇文章主要介绍了循环调度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的评论]

猜你在找的Java相关文章