线程计时器返回NULL输出

时间:2015-06-10 23:09:33

标签: java multithreading

我有一个在条件为false时运行的线程。对于每一秒都是假的,然后它将增加1秒的时间,然后返回该时间。我的问题是,在代码的末尾,它不返回任何输出,也就是说,没有整数变量返回到输出。

注意:对于此程序,假设用户正确猜出了数字,并且胜利为真。

编辑:代码执行()已添加到while win = false

Thread thread = new Thread() {
  public int run(boolean win){
     int time = 0;
     while(win == false) {
        try {
              time++;
              Thread.sleep(1000);
        }
        catch(Exception e) {

        }
    }
    return time;
  }
}; 

public void execute() {
    thread.start();
}

当win为false时,此线程继续增加,然后返回win为true时的时间值。

 public void userGuessNumber() {
     boolean win = false
     [...] // Options Menu Code - timer should not increment for this section       
     while(win == false) {
      execute();
        if(guess == number) {
            win = true;
        }
 [...] // Do some code 
 }
}

当用户正确猜出数字时,胜利为真。那是线程应该停止递增的时候。然后下面是方法输出时间:

public void outputInfo() {
 System.out.print("The time it had taken to guess the number: ");
     execute();
}

编辑代码:我在while循环中添加了execute();我的逻辑是我希望线程只在用户开始猜测一个数字时开始计数。我在outputInfo方法中的execute()语句中打算打印从线程运行时生成的数字,但我相信这可能在语义上是不正确的。

execute是一个运行线程代码的方法,但由于某种原因,输出为空,并且不返回任何内容。

相反,我希望它返回在胜利达到真之前已经过的时间数。

1 个答案:

答案 0 :(得分:1)

这真的不是正确使用线程。多线程应该用于事件处理或具有较长的后台进程,例如下载。

您可以使用System.currentTimeMillis()轻松跟踪时间,将其分配给变量,然后您就可以获得以毫秒为单位的时间差异。如果你想要它在几秒钟内,只需除以1000.

这是一个片段:

 public void userGuessNumber() {
     boolean win = false
     [...] // Options Menu Code - timer should not increment for this section       
     long guessNumberStarted = System.currentTimeMillis();
     int timeElapsed = 0;
     while (!win) {
        if (guess == number) {
            win = true;
            timeElapsed = (int)(System.currentTimeMillis() - guessNumberStarted) / 1000;
        }
     }
 [...] // Do some code 
 }

不仅缩短了代码,也没有在后台运行任何不需要的代码,并且您可以更准确地计算传递的时间,前提是您将变量设置为double或long