Метод shutdown(), вызванный для ScheduledThreadPoolExecutor, дает всем ранее опубликованным задачам завершиться, в то время как ThreadPoolTaskScheduler.shutdown() прерывает все уже запущенные задачи. Чтобы ThreadPoolTaskScheduler вел себя также, как и JDK`ная реализация ScheduledExecutorService, нужно выполнить scheduler.setWaitForTasksToCompleteOnShutdown(true) перед вызовом scheduler.shutdown().
barbitoff programmer`s blog
Здесь я публикую заметки из программерской жизни: грабли, на которые мне случилось наступить, проблемы, для которых было найдено элегантное (или не очень) решение, а также все, с чем мне пришлось столкнуться и чем хотелось бы поделиться =)
PS Если хотите меня поблагодарить - на странице есть 3 места, чтобы это сделать =)
Показаны сообщения с ярлыком ScheduledExecutorService. Показать все сообщения
Показаны сообщения с ярлыком ScheduledExecutorService. Показать все сообщения
среда, 11 июля 2012 г.
Различие в поведении метода shutdown() в java.util.concurrent.ScheduledThreadPoolExecutor и org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler
в
18:26:00
0
коммент.


Отправить по электронной почтеНаписать об этом в блогеПоделиться в XОпубликовать в FacebookПоделиться в Pinterest
Ярлыки:
многопоточность,
Java,
Java concurrent,
ScheduledExecutorService,
ScheduledThreadPoolExecutor,
Spring Framework,
ThreadPoolTaskScheduler,
ThreadPoolTaskScheduler.shutdown
среда, 21 марта 2012 г.
Выполнение периодических задач в сервлете
Чтобы выполнять какой-то код в сервлете периодически, с момента инициализации сервлета и до окончания его жизненного цикла, нужно сделать следующее (на примере Tomcat 6):
1) Добавить в веб-приложении класс, реализующий интерфейс ServletContextListener:
package example;Чтобы методы этого класса contextInitialized и contextDestroyed вызывались, соответственно, при инициализации и уничтожении контекста веб-приложения, необходимо добавить в web.xml внутрь тега web-app следующее:
public class ServletContextExample implements ServletContextListener{
public void contextInitialized(ServletContextEvent contextEvent) {
System.out.println("Context Created");
}
public void contextDestroyed(ServletContextEvent contextEvent) {
System.out.println("Context Destroyed");
}
}
<listener>2) Теперь можно воспользоваться классом ScheduledExecutorService для вызова необходимой периодической задачи (задача должна быть заключена в класс, реализующий интерфейс Runnable). Для этого в методе contextInitialized нужно инициализировать ScheduledExecutorService, а в contextDestroyed - корректно завершить его работу:
<listener-class>
example.ServletContextExample
</listener-class>
</listener>
package example;В данном примере метод MyRunnableImpl.run() будет выполняться раз в час.
public class ServletContextExample implements ServletContextListener{
private ScheduledExecutorService scheduler;
public void contextInitialized(ServletContextEvent contextEvent) {
System.out.println("Context Created");
scheduler = Executors.newSingleThreadScheduledExecutor();
scheduler.scheduleAtFixedRate(new MyRunnableImpl(), 0, 1, TimeUnit.HOURS);
}
public void contextDestroyed(ServletContextEvent contextEvent) {
System.out.println("Context Destroyed");
scheduler.shutdown();
}
}
Использованы материалы с javabeat.net и stackoverflow.com.
Подписаться на:
Сообщения (Atom)