gpt4 book ai didi

java - 在java中执行用于调度机器的循环算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:27:25 24 4
gpt4 key购买 nike

在数据库中,我有一个表,其中包含每台机器的 machine_idburst_time

mach_id      burst_time
1 3
2 2
3 1
4 2
5 4

我的循环算法代码是:

    ResultSet rs = stmt1.executeQuery("select burst_time from virtual_machine WHERE VM_id <= '"
+ size + "'");
while (rs.next()) {
list22.add(rs.getString("burst_time"));

}
long[] bur = new long[list22.size()];
long[] rem = new long[list22.size()];
for (int i = 0; i < list22.size(); i++) {
SimpleDateFormat formatter1 = new SimpleDateFormat("HH:mm:ss");
formatter1.setTimeZone(TimeZone.getTimeZone("GMT"));

try {
java.util.Date d1 = formatter1.parse(list22.get(i));
long btm = d1.getTime();
rem[i] = bur[i] = btm;
} catch (java.text.ParseException e1) {
System.err.println("Error: " + e1.getMessage());
}
}

List<Integer> execOrder = new ArrayList<Integer>();

//for (long currTime = System.currentTimeMillis(); currTime <=currTime+ et1; currTime += 10 * 1000) {
do {
flagClounter = 0;

for (int i = 0; i < size; i++) {
if (rem[i] > 0) {
if (rem[i] > qtm) {
execOrder.add(i + 1);
rem[i] = rem[i] - qtm;
flagClounter++;
// Thread.sleep(40000);
} else {
execOrder.add(i + 1);
rem[i] = 0;
flagClounter++;
}
}
}

//flagClounter++;
} while (flagClounter > 0);

for (int i = 0; i < execOrder.size(); i++) {
System.out.println("\nVM " + execOrder.get(i));
}

这里的循环概念工作得很好..当时间量程 = 2 时它会打印以下内容

1 2 3 4 5 1 5

但我想要的是打印确切的 machine_id's 而不是上面存储在数组中的整数值,它会随着循环递增..我怎样才能得到确切的 machine_id's存储在数据库中以在程序中使用并在调度后以相同的上述形式打印...任何人都可以帮助我如何将其放入程序中....

最佳答案

rem 似乎是剩余突发时间的数组。相反,如果它是一个对象数组,每个对象代表一台机器,您将同时拥有剩余的突发时间和机器 ID(以及您想要的任何其他内容)可用于打印。

您也可以创建第二个数组,名称(例如)mid,这样 mid[i] 就是与正在计算时间的机器关联的机器 ID在 rem[i] 中跟踪。现在,您可以执行 execOrder.add(mid[i]) 而不是 execOrder.add(i+1)

关于java - 在java中执行用于调度机器的循环算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22963923/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com