【发布时间】:2014-05-22 16:25:34
【问题描述】:
我有一个线程每天在给定时间运行。 它给了我这个错误信息:
2014-05-21 03:57:06 [CRITICAL][AlertMgr]:维护:
java.lang.IllegalArgumentException:超时值为负 在 java.lang.Thread.sleep(本机方法) 在 com.orca.pf.tc50.managerutilities.maintenance.MaintenanceManager.backgroundProcess(未知 资源) 在 com.orca.pf.tc50.managerutilities.maintenance.MaintenanceManager.access$000(未知 资源) 在 com.orca.pf.tc50.managerutilities.maintenance.MaintenanceManager$1.run(未知 资源) 在 java.lang.Thread.run(Thread.java:745)。
你知道是什么原因造成的吗?
谢谢
private void backgroundProcess()
{
Calendar cal;
cal = Calendar.getInstance();
log.addHelpField("AlertMgr");
/*
* Synchronise le calendrier a 3:00AM
*/
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
if (cal.get(Calendar.HOUR_OF_DAY) > HOUR_START)
{
/*
* wait till tomorrow
*/
cal.set(Calendar.HOUR_OF_DAY, HOUR_START);
cal.add(Calendar.DAY_OF_YEAR, 1);
}
else
{
cal.set(Calendar.HOUR_OF_DAY, HOUR_START);
}
do
{
try
{
/*
* Calculate the time to wait
*/
long timeToWait = cal.getTimeInMillis() - System.currentTimeMillis();
Thread.sleep(timeToWait);
processAllEntries();
/*
* wait for tomorrow
*/
cal.add(Calendar.DAY_OF_YEAR, 1);
/*
* Clear
*/
Thread.interrupted();
}
catch(InterruptedException i)
{
Thread.currentThread().interrupt();
}
catch(Exception ex)
{
log.addException(LogLevel.CRITICAL, "maintenance", ex);
}
}
while(!th.isInterrupted());
}
【问题讨论】:
-
当前时间是现在,日历是过去,减去它会得到一个负值。
-
如果日历是过去的 w 添加一天 if (cal.get(Calendar.HOUR_OF_DAY) > HOUR_START) cal.add(Calendar.DAY_OF_YEAR, 1);
标签: java multithreading timeout illegalargumentexception