classe publique ClearDownService {
fils privés d'international ;
executorService privé d'ExecutorService ;
ClearDownService public (fils d'international) {
si (fils < 1="">= 1. « ) ;
}
this.threads = fils ;
this.executorService = Executors.newFixedThreadPool (this.threads) ;
}
// I a modifié votre code d'itération pour supposer que vous avez une certaine collection d'objets d'OrderModel
// que vous employez pour obtenir l'iterator. Puisque vous employez JDK 1.5+, son beaucoup plus
// lisible et maintenable pour employer des médicaments génériques au lieu de mouler le retour d'iterator.next ().
// I a également modifié votre code d'itération pour employer la construction intégrée de foreach.
checkOrders vides de public (ordres de collection) {
// initialisent le verrou pour tout le nombre d'ordres, au lieu des fils.
// que ceci s'assure que tous les ordres sont traités avant que cette méthode accomplisse
startLatch final de CountDownLatch = nouveau CountDownLatch (orders.size ());
// puisque vous employez JDK 1.5+, plus facile de lire et maintenir si vous employez des médicaments génériques
// et le foreach intégré au lieu de l'iterator
pour (modèle final d'OrderModel : ordres) {
executorService.submit (nouveau praticable () {
vide de public couru () {
essai {
Calendrier maintenant = Calendar.getInstance (TimeZone.getTimeZone (la « Europe/Londres »));
si (isEligibleForClearDown (modèle, master.getCleardownFields () .getClearDownReqFrom (), maintenant)) {
si (model.getOrderFields () .hasParentOrderId ()) {
// ajoutent tous les ordres d'enfant au résultat final
results.add (modèle) ;
} autrement {
// ajoutent des ordres de parent à la liste de parent
parentOrders.add (modèle) ;
}
}
} finalement {
// mettant ceci dans finalement un bloc s'assure qu'il obtient appelé sans se soucier
// de toutes exceptions qui se produisent dans le corps de la méthode
startLatch.countDown () ;
}
}
}) ;
}
essai {
startLatch.await () ; attente de // tous les objets au traitement complet
} crochet (InterruptedException e) {
LOGGER.error (« exception interrompue tout en attendant le verrou de compte à rebours à end.") ;
}
}
}
|