--- dao/FuldDaekningWorker/src/dk/daoas/fulddaekning/Lookup.java 2014/12/10 09:50:33 2241 +++ dao/FuldDaekningWorker/src/dk/daoas/fulddaekning/Lookup.java 2015/02/10 16:27:15 2263 @@ -3,6 +3,8 @@ import java.util.Map; import java.util.Queue; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.CyclicBarrier; +import java.util.concurrent.ThreadPoolExecutor; import java.util.logging.Level; import java.util.logging.Logger; @@ -22,13 +24,16 @@ Map workers = new ConcurrentHashMap(); + ThreadPoolExecutor threadPool; + CyclicBarrier barrier; - public Lookup(String postnr, Database db) { + public Lookup(String postnr, Database db, ThreadPoolExecutor threadPool) { this.postnr = postnr; this.db = db; + this.threadPool = threadPool; } @@ -41,6 +46,8 @@ long start1 = System.currentTimeMillis(); long start2 = 0; + barrier = new CyclicBarrier(LookupMain.max_workers + 1); + try { logger.info("Henter _ikke_ daekkede adresser i " + postnr); @@ -58,7 +65,8 @@ logger.info("Bbox Adjusted=" + bbox); logger.info("Henter daekkede adresser i " + postnr); - daekkedeAdresser = db.hentDaekkedeAdresser(bbox); + daekkedeAdresser = db.hentDaekkedeAdresserCache(bbox); + stat.postnr = postnr; stat.antalDaekkede = daekkedeAdresser.length; @@ -70,16 +78,11 @@ start2 = System.currentTimeMillis(); for (int i =0; i < LookupMain.max_workers; i++) { - LookupWorker worker = new LookupWorker(i, this); - Thread t = new Thread(worker); - t.start(); - - workers.put(i, worker); + LookupWorker worker = new LookupWorker(i, this, barrier); + threadPool.submit(worker); } - while (workers.size() > 0) { - Thread.sleep(10);//wait for worker threads - } + barrier.await(); db.saveBatch();//Save any unsaved rows @@ -102,15 +105,6 @@ logger.info("Done! elapsed=" + (now-start1) + "/" + (now-start2) + " postnr=" + postnr); } - public void shutdownWorker(int workerid) { - //logger.info("Shutting down worker: " + workerid); - LookupWorker key = workers.remove(workerid); - - if (key == null) { - System.out.println("Error removing worker from set " + workerid); - System.exit(0); - } - } // Getters and setters