我正在尝试模拟任务管理器,可以在其中创建线程并查看它们已运行了多少。该线程不会增加到1以上。
这是我实体中的run方法。
@Override
public void run() {
if(this.GetRuntime() == 0)
Active = true;
this.SetRuntime(this.GetRuntime() + 1);
try {
ProcessThread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
这是我正在运行线程的开关情况。
switch(command)
{
case 1:
System.out.println("Process PID: ");
int pid = in.nextInt();
System.out.println("Process name: ");
String name = in.next();
System.out.println("Process memory: ");
int memory = in.nextInt();
ProcessThread newProcess = new ProcessThread(pid, name, memory);
if(memory > freeMemory) {
System.out.println("There is not enough memory available\n\n");
break;
}
freeMemory -= newProcess.getMemory();
newProcess.start();
//processService.RunProcess(newProcess, freeMemory);
processList.add(newProcess);
break;
case 5:
for(int i = 0; i < processList.size(); i++) {
ProcessThread currentProcess = processList.get(i);
System.out.println(currentProcess.getProcessName() + "has been running for " +
currentProcess.GetRuntime() + "s - consuming " +
currentProcess.getMemory() + " MB");
}
System.out.println(freeMemory + " MB left.\n\n");
break;
}
给出命令5时,结果应为: 线程1已运行5秒钟-消耗100MB
我所有的线程都返回1的运行时间。
答案 0 :(得分:-1)
您的线程休眠10秒而不是1秒。
将ProcessThread.sleep(10000);
更改为ProcessThread.sleep(1000);
并且您的运行时实现中需要一个循环,如其他已使用的循环所述
答案 1 :(得分:-1)
发现我的错误,我应该在run函数中添加一个循环
while(true) {
this.SetRuntime(this.GetRuntime() + 1);
try {
ProcessThread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
这现在增加了计数器的作用。