我在我的应用程序中使用了Spring ThreadPoolTaskExecutor。我的方法的一个方法需要仅在周五午夜之前调用。该方法被调用服务器startup.So我现在用的是Thread.sleep()
以下列方式Java中的Thread.sleep()的替代方法
Calendar today = Calendar.getInstance();
int dayOfWeek = today.get(Calendar.DAY_OF_WEEK);
int daysUntilNextFriday = Calendar.FRIDAY - dayOfWeek;
if(daysUntilNextFriday < 0){
daysUntilNextFriday = daysUntilNextFriday + 7;
}
Calendar c = Calendar.getInstance();
c.add(Calendar.DAY_OF_YEAR, daysUntilNextFriday);
c.set(Calendar.HOUR_OF_DAY, 0);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
Date d1 = c.getTime();
long diffTime = d1.getTime() - new Date().getTime();
Thread.sleep(diffTime);
在某些情况下,它可能会等待超过1天为好。有没有更好的方法,而不是使用Thread.sleep()
。我在有些地方看到使用Thread.sleep()
会是性能问题。在我的情况下,是否有其他选择来提高性能?
最初我们使用ThreadPoolTaskExecutor安排了近50个服务。一些服务没有正常启动。我们无法找到过去1 month.So确切的问题,我们希望与执行尝试
请参阅本Spring scheduler is stopping unexpectedly and starting again
对于需要在特定日期的特定时间定期运行的程序,您应该使用quartz scheduler或cron。 – RealSkeptic
“提高性能”?如果你睡了一天,表现真的不是问题。您遇到的更大问题是确保您的JVM仍在运行。 –
我会亲自使用cronjob,调度程序,ExecutorService或类似的东西。因为Thread.sleep一周看起来很浪费。 –