微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

循环调度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的评论]

原文地址:https://www.jb51.cc/java/124160.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐