我正在研究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++;
}
}
}
如果有修复或需要更多信息,请告知我们。谢谢!
答案 0 :(得分:2)
exec[i]=exec[i]-exec[i];
sum=sum-exec[i];
与
相同exec[i]=0;
sum=sum-0;
另外,你不处理exec [i] == quant
的情况答案 1 :(得分: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