Java如何编写计时器

ace*_*ace 3 java

我想在java中编写一个计时器,它将执行以下操作:当程序启动时,启动timer1,它将在45分钟后停止,同时启动第二个计时器,它将在15分钟后停止.此时第一个计时器将再次启动,并重复上述循环,直到程序退出第一个计时器:45分钟(我可以使用计算机的时间)第二个计时器:15分钟(暂停时间)第一个计时器:45分钟(时间)我可以使用电脑)第二个计时器:15分钟(暂停时间)第一个计时器:45分钟(我可以使用计算机的时间)第二个计时器:15分钟(暂停时间)

我不知道如何使用线程和计时器(utils,swing)所以我试图使用while(true)但cpu上升.这是我目前的代码

static int getMinute(){
    Calendar cal=Calendar.getInstance();
    int minute=cal.getTime().getMinutes();
    return minute;
}

public static Runnable clockf(){
    if (endTime>=60){
        endTime=endTime-60;}
    System.out.println(startTime);
    System.out.println(currentTime);
    System.out.println(endTime);

    if(currentTime==endTime){
        pauseStart=getMinute();
        currentTime=getMinute();
        pauseEnd=pauseStart+15;

        if(currentTime==pauseEnd){
            pauseStart=0;
            pauseEnd=0;
            startTime=getMinute();
            currentTime=getMinute();
            endTime=startTime+45;
        }
    }
    else{
        update();
    }

    return null;
Run Code Online (Sandbox Code Playgroud)

}

private static void update() {
    currentTime=getMinute();
    System.out.println(currentTime);
}

public static void main(String[] args) {
    startTime=getMinute();
    currentTime=getMinute();
    endTime=startTime+45;

    Thread t=new Thread(clockf());
    t.setDaemon(true);
    t.start();
    try {
        Thread.currentThread().sleep(1000);//60000

    } catch (InterruptedException e) {
        System.err.println(e);
    }



    }
Run Code Online (Sandbox Code Playgroud)

但它并不好.有没有办法让clockf方法只运行一次/分钟?或任何其他方式使该计时器运行?

Kai*_*ann 5

即使我没有完全理解你要做什么, TimerTimerTask应该为你做到这一点.以下代码必须改进一点才能运行,但希望显示原理:

long minute = 1000*60;

Timer timer1 = new Timer();
long delay1 = 45*minute;
Timer timer2 = new Timer();
long delay2 = 15*minute;
TimerTask tt1;
TimerTask tt2;

...

tt1 = new TimerTask()
{
   public void run()
   {
      //do something and:
      timer2.schedule(tt2, delay2);
   }
};

tt2 = new TimerTask()
{
   public void run()
   {
      //do something and:
      timer1.schedule(tt1, delay1);
   }
};

timer1.schedule(tt1, delay1);
Run Code Online (Sandbox Code Playgroud)


duf*_*ymo 5

编写和最容易维护的最快代码是你根本不写的东西.

我会研究像Quartz这样的计时器和作业调度程序,看看它是否对你有所帮助.