如何使用Java.Util.Timer

时间:2014-04-15 22:27:04

标签: java timer timertask

我想创建一个简单的程序,使用Java.Util.Timer将秒数计算到100 下面的代码是我正在使用的代码,但是它只是一次打印所有数字,而不是在每一个之间等待一秒。我该如何解决这个问题? (通常我会使用thread.sleep,但这只是概念证明。)

import java.util.Timer;
import java.util.TimerTask;

public class Main {
    static Timer timer = new Timer();
    static int seconds = 0;

    public static void main(String[] agrs) {

        MyTimer();

    }

    public static void MyTimer() {

        TimerTask task;

        task = new TimerTask() {
            @Override
            public void run() { 
                while (seconds < 100) {
                    System.out.println("Seconds = " + seconds);
                    seconds++;
                }
            }
        };
         timer.schedule(task, 0, 1000);

    }

}}

2 个答案:

答案 0 :(得分:4)

不要在while循环中使用它:

    task = new TimerTask() {
        @Override
        public void run() { 
            while (seconds < 100) {
                System.out.println("Seconds = " + seconds);
                seconds++;
            }
        }
    };

while循环将立即运行,因为它内部没有延迟。相反,你想让Timer本身成为你的循环,这意味着不需要这个循环。

而是使用if块来检查计数是否为&lt;一些最大数量,如果是这样,打印出来并递增计数。

    task = new TimerTask() {
        private final int MAX_SECONDS = 100;

        @Override
        public void run() { 
            if (seconds < MAX_SECONDS) {
                System.out.println("Seconds = " + seconds);
                seconds++;
            } else {
                // stop the timer
                cancel();
            }
        }
    };

答案 1 :(得分:0)

为了停止计时器,应该调用 timer.cancel()(不仅是TimerTask之一),因此计时器将停止并串联其他相关线程。

          @Override
        public void run() {
            if (seconds < Orologio.MAX_SECONDS) {
                System.out.println("Seconds = " + seconds);
                seconds++;
            } else {
                timer.cancel();
                System.out.println("Timer canceled");

            }
        }

    };