--- dao/FuldDaekningWorker/src/dk/daoas/fulddaekning/LookupMain.java 2014/12/10 10:06:32 2244 +++ dao/FuldDaekningWorker/src/dk/daoas/fulddaekning/LookupMain.java 2015/02/10 16:27:15 2263 @@ -6,6 +6,7 @@ import java.util.logging.FileHandler; import java.util.logging.Logger; import java.util.logging.SimpleFormatter; +import java.util.concurrent.*; public class LookupMain { @@ -29,6 +30,12 @@ static Statistik stoersteDataset = new Statistik(); static Adresse[] alleDaekkedeAdresser; + + static ThreadPoolExecutor threadPool; + + private static void setupThreadPool() { + threadPool = (ThreadPoolExecutor) Executors.newFixedThreadPool(max_workers, new WorkerThreadFactory() ); + } public static void main(String[] args) throws Exception { @@ -61,6 +68,7 @@ } logger.info("Starting with MAX_WORKERS:" + max_workers); + setupThreadPool(); verbose = Boolean.parseBoolean( conf.getSafeProperty("VERBOSE") ); @@ -77,8 +85,6 @@ Constants consts = Constants.getInstance(); Database db = new Database(conf); - - boolean testRun= false; @@ -98,18 +104,16 @@ 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) { - Lookup lookup = new Lookup(postnr, db); + Lookup lookup = new Lookup(postnr, db, threadPool); lookup.doLookup(); } @@ -130,9 +134,11 @@ logger.info( "AlleDaekkedeAdresser.length=" + alleDaekkedeAdresser.length); } - Lookup lookup = new Lookup("458x", db); + Lookup lookup = new Lookup("458x", db, threadPool); lookup.doLookup(); } + + threadPool.shutdown(); long now = System.currentTimeMillis(); long elapsed = now - start ; @@ -169,5 +175,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++); + } + } }