2017-02-14 16 views
0

Как получить результат из задачи, которая выполняется периодически (каждые n секунд)? Результат необходим для дальнейшей обработки. И задача должна выполняться вечно (как услуга, пока услуга не будет отключена). Я не использую Spring.Как получить результат в задаче периодического запуска с использованием Callable

Поскольку результат только для Callable возвращает результат, я должен использовать этот метод: schedule (Callable task, long delay, TimeUnit timeunit), а не scheduleAtFixedRate метод, и поместить его в неопределенный while(true) цикл. Есть ли лучшее решение? Проблема заключается в извлечении результата из задачи периодического запуска.

public class DemoScheduledExecutorUsage { 
    public static void main(String[] args) { 
     ScheduledFuture scheduledFuture = null; 
     ScheduledExecutorService scheduledExecutorService = 
     Executors.newScheduledThreadPool(1); 
    while (true) { 
     scheduledFuture = 
      scheduledExecutorService.schedule(new Callable() { 
       public Object call() throws Exception { 
        //...some processing done in anothe method 
        String result = "Result retrievd."; 
        return reult; 
       } 
      }, 
      10, 
      TimeUnit.SECONDS); 

     try { 
      //result 
      System.out.println("result = " + scheduledFuture.get()); 
     } catch (Exception e) { 
      System.err.println("Caught exception: " + e.getMessage()); 
     } 
    }  
    //Stop in Deactivate method 
    //scheduledExecutorService.shutdown(); 
} 
} 

ответ

0

Вы можете использовать Timer включенный в JRE. Использование бесконечного цикла while - это не самая лучшая идея. Ваша программа будет работать вечно, и у вас нет шансов ее прекратить.