2011-02-28 3 views
1

Je cherchais des librairies de threads open source que je peux utiliser pour planifier les tâches et une fois que ce travail individuel est terminé, je veux une notification dans le thread afin que je puisse terminer le reste de la tâche. Est-ce que vous connaissez un lib open source qui fait un travail similaire? Je pourrais employer cette lib dans le serveur diff différent.Open Source threadpool lib

Mon aperçu de base de ma tâche est d'avoir une liste d'éléments. Chaque élément doit être soumis à un autre système JMS/Webservice, puis attendre la réponse pour chaque élément traité et effectuer le reste de la tâche.

Merci d'avance

Répondre

3

Que diriez-vous de j.c. ThreadPoolExecutor? Correctement emballé et couplé avec une utilisation judicieuse de Future, il devrait répondre à vos spécifications énoncées. Si vous avez un comportement spécifique "Bloquer ce thread jusqu'à la fin du jeu de tâches suivant", vous pouvez également utiliser un CompletionService.

Comme un autre répondeur l'a fait remarquer, vous pouvez également utiliser Quartz Scheduler si vous avez vraiment besoin d'un service de planification de tâches complet. Il semble que ce soit trop pour votre problème, mais vous n'avez pas donné de détails. Si c'est le chemin que vous prenez, il y a un lot of good Q+A on Quartz Scheduler ici à SO.

+0

Ma réponse vous indique TPE car il n'est pas clair dans votre question si vous avez vraiment besoin d'un robuste appareil de planification des tâches - i Il semble que vous ayez un service Web qui supprime des tâches indépendantes d'une tâche initiale et qui attend ensuite leur achèvement. Si vous avez vraiment besoin de planifier des tâches, QuartzScheduler (voir la réponse de @ harschware) est la bonne solution. – andersoj

+0

merci andersoj, après avoir fait un peu de proptotypage initial, je pense que le quartz correspond à nos besoins et à l'avenir, nous pourrions aussi avoir besoin de cron emplois. Alors merci beaucoup pour cette information. – user509755

1

Découvrez ScheduledExecutors, exécutez beepForAnHour une fois au bout de 10 secondes, puis toutes les 10 secondes par la suite:

import static java.util.concurrent.TimeUnit.*; 
class BeeperControl { 
    private final ScheduledExecutorService scheduler = 
     Executors.newScheduledThreadPool(1); 

    public void beepForAnHour() { 
     final Runnable beeper = new Runnable() { 
       public void run() { System.out.println("beep"); } 
      }; 
     final ScheduledFuture<?> beeperHandle = 
      scheduler.scheduleAtFixedRate(beeper, 10, 10, SECONDS); 
     scheduler.schedule(new Runnable() { 
       public void run() { beeperHandle.cancel(true); } 
      }, 60 * 60, SECONDS); 
    } 
} 

De:

http://download.oracle.com/javase/6/docs/api/java/util/concurrent/ScheduledExecutorService.html