我想为系统的每个事务创建一个程序任务,以保留等待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
答案 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)) ;