2017-02-14 1 views
0

Comment récupérer le résultat de la tâche exécutée périodiquement (toutes les n secondes)? Le résultat est nécessaire dans un traitement ultérieur. Et la tâche devrait durer éternellement (en tant que service, jusqu'à ce que le service soit désactivé). Je n'utilise pas Spring.Comment récupérer le résultat dans une tâche exécutée périodiquement à l'aide de l'option Appelable

Étant donné que seuls les retours Callable résultent, je dois utiliser cette méthode: schedule (Callable task, long delay, TimeUnit timeunit), pas la méthode scheduleAtFixedRate, et la placer dans une boucle while(true) indéfinie. Y a-t-il une meilleure solution? Le problème consiste à récupérer le résultat de la tâche exécutée périodiquement.

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(); 
} 
} 

Répondre

0

Vous pouvez utiliser le Timer inclus dans JRE. L'utilisation d'une boucle infinie est IMO pas la meilleure idée. Votre programme fonctionnera pour toujours et vous n'avez aucune chance de le terminer.