我在我的應用程序中使用了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一週看起來很浪費。 –