1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52:
allmänhet klassificerar ClearDownService { privata int-trådar; privat ExecutorService executorService; offentliga ClearDownService (int-trådar) { om (trådar < 1="">= 1. ”); } this.threads = trådar; this.executorService = Executors.newFixedThreadPool (this.threads); } // I ändrade din upprepning kodifierar för att anta att du har någon samling av OrderModel anmärker // att du använder för att få iteratoren. Sedan du använder JDK 1.5+ som är dess mycket mer försvarbar // som är läslig och att använda Generics i stället för rollbesättning returen av iterator.next (). // I ändrade också din upprepning kodifierar för att använda den inbyggde foreachtankeskapelsen. offentliga utan laga kraft checkOrders (samlingen beställer) { // initialiserar låser för slutsumman numrerar av beställer, i stället för trådar. // som detta ser till att allt beställer bearbetas, för denna metod avslutar finalCountDownLatch startLatch = nya CountDownLatch (orders.size ()); //, sedan du använder JDK 1.5+ som är lättare att läsa och underhålla, om du använder generics // och den inbyggde foreachen i stället för iteratoren för (finalen OrderModel modellerar: beställer) { executorService.submit (nya Runnable () { offentligt annullera körningen () { försök { Kalender nu = Calendar.getInstance (TimeZone.getTimeZone (”Europa/London”)); om (isEligibleForClearDown (modellera, master.getCleardownFields () .getClearDownReqFrom (), nu)), { om (model.getOrderFields () .hasParentOrderId ()) { // tillfogar allt barn beställer till finalresultatet results.add (modellera); } annars { // tillfogar föräldern beställer till föräldern listar parentOrders.add (modellera); } } } slutligen { // som sätter denna i ett kvarter, ser till slutligen att det får kallat utan hänsyn // av några undantag som uppstår i förkroppsliga av metoden startLatch.countDown (); } } }); } försök { startLatch.await (); den // alla väntan för anmärker för att avsluta att bearbeta } fånga (InterruptedException e) { LOGGER.error (”avbrutna undantagsstunder som väntar nedräkningen, låser för att avsluta. ”); } } }