scheduleWithFixedDelay работает только при вызове метода get () - PullRequest
2 голосов
/ 18 июля 2011

Я создаю 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");
}

Спасибо за чтение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...