Я создаю ScheduledExecutorService со следующим кодом:
ScheduledExecutorService schedExe = Executors.newSingleThreadScheduledExecutor();
Я называю это так:
ScheduledFuture<?> sf = schedExe.scheduleWithFixedDelay(new RequestScheduler(), 1, 1, TimeUnit.SECONDS);
Класс RequestScheduler () для тестирования является простой реализацией Runnable, таким образом:
public class RequestScheduler implements Runnable {
public void run() {
System.out.println("$$$$RequestScheduler running");
}
}
Когда я вызываю scheduleWithFixedDelay, код не запускается. Если я ссылаюсь на метод get () объекта ScheduledFuture, возвращаемого вызовом, он запускается.
Есть идеи, почему это может происходить? Нужно ли мне вызывать get () для моего ScheduledExecutorService?
Создание ScheduledExecutorService находится в локальном методе (это было на уровне класса прежде, но я переместил это). Это полный метод, который вызывается из main:
public void pollDatabase(long databasePoll, String tbHost, int tbPort, int maxPool) throws IllegalAccessException, InstantiationException, ClassNotFoundException{
if(logger.isInfoEnabled()){
logger.log(Level.INFO, String.format(Messages.CREATED_SCHEDULER, new Date().toString(),databasePoll,maxPool,tbHost,tbPort) );
}
ScheduledExecutorService schedExe = Executors.newSingleThreadScheduledExecutor();
ScheduledFuture<?> sf = schedExe.scheduleWithFixedDelay(new RequestScheduler(), 1, 1, TimeUnit.SECONDS);
try {
System.out.println(sf.get());
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
System.out.println("-call to executor has been made");
}
Спасибо за чтение.