在数据库中,我有一个表,其中包括每台机器的machine_id
和burst_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,并在调度后以上述相同的形式打印它。。。有谁能帮我把它放在节目中吗。。。。
rem
似乎是剩余突发时间的数组。如果它是一个对象数组,每个对象代表一台机器,那么剩余的突发时间和机器id(以及您想要的任何其他信息)都可以打印。
您也可以创建第二个数组,名称为(例如)mid
,使mid[i]
是与在rem[i]
中跟踪其时间的机器相关联的机器id。现在,您应该执行execOrder.add(mid[i])
而不是execOrder.add(i+1)
。
您可以对代码进行以下更改:
Map<Integer, Integer> machine = new HashMap<Integer, Integer>();
//Map 'machine' will store each entry as machine_id, burst_time
ResultSet rs = stmt1.executeQuery("select burst_time, machine_id from virtual_machine WHERE VM_id <= '"+ size + "'");
while (rs.next()) {
machine.put(rs.getInt("machine_id"), rs.getInt("burst_time");
}
您所有的突发时间都以机器id为密钥。这样您就可以打印相应的机器id,而不是突发时间。