Задача: один раз в 30 секунд писать в лог HELLO WORLD
Решение:
Замечание 1. В решении используется Singleton. Единственная причина для этого - нежелание хранить ссылку на созданных шедуллер в своих ресурсах. Педполагается, что после запуска шедуллера свои ресурсы выгружаются полностью. А заново загружаются либо по внешней команде, либо по команде шедуллера.
Если в Ваших условиях задачи нет такого ограничения, если Ваше приложение остается в памяти и после запуска шедуллера - от Singleton вполне можно отказаться.
Замечание 2. Использование Singleton накладывает серьезные ограничения на количество Шедуллеров порожденных от одного класса. В частности, в приведенном примере нельзя создать более одного. Если требуется создать множество шедуллеров с одним обработчиком, то данный класс легко модифицировать, сохранив данные класса в массиве. Если же требуется создать множество шедуллеров с разными обработчиками то от концепции Singleton следует отказаться.
Оригинал
Решение:
Замечание 1. В решении используется Singleton. Единственная причина для этого - нежелание хранить ссылку на созданных шедуллер в своих ресурсах. Педполагается, что после запуска шедуллера свои ресурсы выгружаются полностью. А заново загружаются либо по внешней команде, либо по команде шедуллера.
Если в Ваших условиях задачи нет такого ограничения, если Ваше приложение остается в памяти и после запуска шедуллера - от Singleton вполне можно отказаться.
Замечание 2. Использование Singleton накладывает серьезные ограничения на количество Шедуллеров порожденных от одного класса. В частности, в приведенном примере нельзя создать более одного. Если требуется создать множество шедуллеров с одним обработчиком, то данный класс легко модифицировать, сохранив данные класса в массиве. Если же требуется создать множество шедуллеров с разными обработчиками то от концепции Singleton следует отказаться.
import static java.util.concurrent.TimeUnit.*;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.logging.Logger;
public class CScheduled {
private static volatile CScheduled instance = null;
public static CScheduled getInstance(){
if(instance == null)
synchronized(CScheduled.class){
if(instance == null)
instance = new CScheduled();
}
return instance;
}
private Logger log = Logger.getLogger( CScheduled.class.getName() );
private final ScheduledExecutorService scheduler;
private final Workuper theWorkuper;
private ScheduledFuture theHandle = null;
private CScheduled(){
this.scheduler = Executors.newScheduledThreadPool(1);
this.theWorkuper = new Workuper();
}
public void start(){
if(this.theHandle != null) stop();
int nDelay = 30;
this.theHandle = this.scheduler.scheduleAtFixedRate(this.theWorkuper, 0, nDelay, SECONDS);
log.info("UScheduled started. Repeat will do every " + String.valueOf(nDelay) + " seconds");
}
public void stop(){
if(theHandle == null) return;
theHandle.cancel(true);
theHandle = null;
log.info("UScheduled stoped");
}
private class Workuper implements Runnable{
public void run() {
log.info( "UScheduled workup" );
log.info( "HELLO WORLD" );
log.info( "UScheduled complete" );
}
}
}
Оригинал
Комментариев нет:
Отправить комментарий