执行循环算法以在java中调度机器

时间:2014-04-09 13:23:14

标签: java algorithm

在数据库中,我的表格包含每台计算机的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));
    }

这里循环概念工作正常......当time quantum = 2时,它会打印以下内容

1 2 3 4 5 1 5

但我想要的是打印精确的machine_id's而不是存储在数组中的这些上面的整数值,它随循环递增..我怎样才能获得精确的machine_id&#39; s存储在数据库中以便在程序中使用,并在安排后以相同的上述形式打印它...任何人都可以帮助我如何把它放在程序中....

2 个答案:

答案 0 :(得分:1)

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

您可以选择创建第二个数组,名称(例如)mid,以便mid[i]是与rem[i]中跟踪时间的计算机关联的计算机ID。现在取代execOrder.add(i+1)而不是execOrder.add(mid[i])

答案 1 :(得分:0)

您可以对代码进行以下更改:

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而不是突发时间。