--- dao/FuldDaekningWorker/src/dk/daoas/fulddaekning/LookupMain.java 2015/02/09 13:21:39 2259 +++ dao/FuldDaekningWorker/src/dk/daoas/fulddaekning/LookupMain.java 2015/03/03 08:14:09 2422 @@ -2,11 +2,13 @@ import java.io.File; import java.io.FileReader; -import java.util.List; +import java.util.Set; +import java.util.concurrent.Executors; +import java.util.concurrent.ThreadFactory; +import java.util.concurrent.ThreadPoolExecutor; import java.util.logging.FileHandler; import java.util.logging.Logger; import java.util.logging.SimpleFormatter; -import java.util.concurrent.*; public class LookupMain { @@ -29,17 +31,12 @@ static Statistik mestBrugteTid = new Statistik(); static Statistik stoersteDataset = new Statistik(); - static Adresse[] alleDaekkedeAdresser; + private static Adresse[] alleDaekkedeAdresser; static ThreadPoolExecutor threadPool; private static void setupThreadPool() { - threadPool = (ThreadPoolExecutor) Executors.newFixedThreadPool(max_workers, new ThreadFactory() { - @Override - public Thread newThread(Runnable r) { - return new Thread(r, "lookupWorker"); - } - }); + threadPool = (ThreadPoolExecutor) Executors.newFixedThreadPool(max_workers, new WorkerThreadFactory() ); } @@ -90,8 +87,7 @@ Constants consts = Constants.getInstance(); Database db = new Database(conf); - - + db.hentAlleIkkedaekkedeAdresser(consts.getMinPostnr(), consts.getMaxPostnr() ); boolean testRun= false; @@ -102,26 +98,24 @@ if (testRun == false) { logger.info("Finder postnumre"); - List postnumre = db.hentPostnumre(); + Set postnumre = db.hentPostnumreCache(); // Først validerer vi BBox på alle postnummre, for at undgå fuldt stop midt i beregningen - for(String postnr : postnumre) { // + for(int postnr : postnumre) { // logger.info("Validerer BBox for " + postnr); BoundingBox bbox = db.getBoundingbox(postnr); bbox.validateBbox(); } - if (consts.doExtendedLookup()) { - logger.info("Henter alle daekkede adresser"); - alleDaekkedeAdresser = db.hentAlleDaekkedeAdresser(); - logger.info( "AlleDaekkedeAdresser.length=" + alleDaekkedeAdresser.length); - } - + + logger.info("Henter alle daekkede adresser"); + alleDaekkedeAdresser = db.hentAlleDaekkedeAdresser(); + logger.info( "AlleDaekkedeAdresser.length=" + alleDaekkedeAdresser.length); //pre-check er ok - reset tmp tabel og start søgningen db.resetResultTable(); - for(String postnr : postnumre) { + for(int postnr : postnumre) { Lookup lookup = new Lookup(postnr, db, threadPool); lookup.doLookup(); } @@ -138,14 +132,16 @@ /// Test db.resetResultTable(); - if (consts.doExtendedLookup()) { - alleDaekkedeAdresser = db.hentAlleDaekkedeAdresser(); - logger.info( "AlleDaekkedeAdresser.length=" + alleDaekkedeAdresser.length); - } + + alleDaekkedeAdresser = db.hentAlleDaekkedeAdresser(); + logger.info( "AlleDaekkedeAdresser.length=" + alleDaekkedeAdresser.length); + - Lookup lookup = new Lookup("458x", db, threadPool); + Lookup lookup = new Lookup(2700, db, threadPool); lookup.doLookup(); } + + threadPool.shutdown(); long now = System.currentTimeMillis(); long elapsed = now - start ; @@ -182,5 +178,14 @@ int hours = (int) ((milliseconds / (1000*60*60)) % 24); return String.format("%02d:%02d:%02d.%03d", hours, minutes, seconds, mseconds); - } + } + + static class WorkerThreadFactory implements ThreadFactory { + int count = 0; + + @Override + public Thread newThread(Runnable r) { + return new Thread(r, "lookupWorker/" + count++); + } + } }