0

我正在研究 Java 中的循环算法,并且我有一个无法正常工作的循环。我相信这是我遗漏的一个简单的逻辑错误。exec[] 数组保存 CPU 中进程的执行时间。我需要从那个时间中减去 quantam,或者如果小于 quantam 则剩余的时间量。然后我需要它来检查下一个过程。每个进程应该有一次通过,直到执行时间为 0。总和确保语句在有任何一个需要运行的进程时继续运行。总和只是将所有数组元素时间相加。

while (sum != 0) {
        int show = i + 1;
        if (exec[i] != 0 && exec[i] > quant) {
            exec[i] = exec[i] - quant;
            sum = sum - quant;
            JOptionPane.showMessageDialog(null, "Process" + "  " + show + " is at" + "  " + exec[i]);
            JOptionPane.showMessageDialog(null, "sum" + " " + " is " + sum);
            if (i == irq - 1) {
                i = 0;
            } else {
                i++;
            }
        }
        if (exec[i] != 0 && exec[i] < quant) {
            exec[i] = exec[i] - exec[i];
            sum = sum - exec[i];
            JOptionPane.showMessageDialog(null, "Process" + "  " + show + " is at" + "  " + exec[i]);
            JOptionPane.showMessageDialog(null, "sum" + " " + " is " + sum);
            if (i == irq - 1) {
                i = 0;
            } else {
                i++;
            }
        }

    }

请让我知道是否有修复或是否需要更多信息。谢谢!

4

2 回答 2

2
exec[i]=exec[i]-exec[i];
sum=sum-exec[i];

exec[i]=0;
sum=sum-0;

另外,您不处理 exec[i]==quant 的情况

于 2013-10-30T17:28:40.720 回答
1

我不确定,你想做什么。这听起来像是“我希望多线程让我的应用程序更快”,但在单核循环中,你不会成功。

如果您想要 CPU 循环,让 JVM(或操作系统)决定。两者都是为此而设计的:

某种java伪代码:

int threadPoolSize = Runtime.getRuntime().availableProcessors();
ExecutorService pool = Executors.newFixedThreadPool(threadPoolSize);
pool.execute(new ImplementationOfCallableOrRunnable());

http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/ExecutorService.html

于 2013-10-30T17:36:44.167 回答