定时动作优化

时间:2016-12-21 14:15:10

标签: java

我想为系统的每个事务创建一个程序任务,以保留等待15分钟。如果超过15分钟,程序将更改状态/状态。如果状态在15分钟内更改,则结束任务。有没有更好的代码可以申请?如等待/睡眠功能,有任何副作用吗?

     Date myTime       = new Date();
     Calendar cal      = Calendar.getInstance();

     cal.setTime(myTime);
     cal.add(Calendar.MINUTE, 15);

     Date endTime      = cal.getTime();
     Date startTime    = new Date();

 do {


     startTime = new Date() ;

     if(checkStatus(_ID) == true )
     {
         System.out.println("Closing task");
         con.close();  // end the task
         System.exit(0); 
     }

 }while (endTime.after(startTime)) ;

// if over 15minutes, code goes here

2 个答案:

答案 0 :(得分:0)

这可能不是您正在寻找的确切解决方案,但也许它可以让您了解如何使用等待/通知方法。

public class Runner {
    static Object monitor = new Object();

    public static void main(String[] args) {
        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.MINUTE, 15);
        Date endTime = cal.getTime();

        long fifteenMinutes = 900000;
        monitor.wait(fifteenMinutes); // waits to be notified, max 15 mins

        if (new Date().after(endTime)) {
            // time ran out without a status change
        }

        System.out.println("Closing task");
        con.close();  // end the task
        System.exit(0); 
    }

    public void updateStatus() {
        // some status logic here
        monitor.notify(); // wakes up the monitor that is waiting
    }
}

答案 1 :(得分:0)

我看到的唯一问题是你的代码正忙着等待。你的程序的线程一直忙于循环。

你可以为每个循环添加一些时间间隔,这个时间间隔将放弃该间隔的cpu。

添加Thread.sleep(1000)以在循环内等待一秒钟。

Thread.sleep(1000)会放弃cpu 1000毫秒,所以你可以:

do {


     startTime = new Date() ;

     if(checkStatus(_ID) == true )
     {
         System.out.println("Closing task");
         con.close();  // end the task
         System.exit(0); 
     }
     Thread.sleep(1000); //give up cpu for the following 1 second and 'do nothing' in this time

 }while (endTime.after(startTime)) ;