Я использую Spring ThreadPoolTaskExecutor в моем приложении. Один из моих методов нужно вызывать только в полночь пятницы. Этот метод вызова на сервере startup.So Я использую Thread.sleep()
следующим образомАльтернатива для Thread.sleep() в java
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()
будет проблемой производительности. В моем случае есть ли альтернатива для улучшения производительности?
Первоначально мы планировали около 50 сервисов с помощью ThreadPoolTaskExecutor. некоторые из услуг, которые не начинают должным образом .Мы не смогли найти точный вопрос из прошлого 1 month.So мы хотели попробовать с исполнителем
Пожалуйста, обратитесь эту Spring scheduler is stopping unexpectedly and starting again
Вы должны использовать планировщик кварца или cron для программ, которые необходимо периодически запускать в определенное время в определенный день. – RealSkeptic
«Улучшить производительность»? Производительность действительно не вызывает беспокойства, если вы спите в течение дня. Большая проблема, с которой вы столкнулись, заключается в том, что ваша JVM все еще работает. –
Я бы лично использовал cronjob, планировщик, ExecutorService или что-то подобное. Потому что Thread.sleep в течение одной недели кажется расточительным. –