第一次打勾后线程计数器不增加

时间:2019-05-06 13:44:03

标签: java multithreading

我正在尝试模拟任务管理器,可以在其中创建线程并查看它们已运行了多少。该线程不会增加到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的运行时间。

2 个答案:

答案 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();
            }
        }

这现在增加了计数器的作用。