package dk.daoas.adressevedligehold.afstandandenrute; import java.sql.Connection; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Queue; import java.util.Set; import java.util.concurrent.CyclicBarrier; import java.util.concurrent.Executors; import java.util.concurrent.ThreadFactory; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.atomic.AtomicInteger; import java.util.logging.Logger; import ags.utils.dataStructures.trees.thirdGenKD.KdTree; import dk.daoas.adressevedligehold.ReloadHelper; import dk.daoas.adressevedligehold.ServiceConfig; import dk.daoas.adressevedligehold.beans.Address; import dk.daoas.adressevedligehold.db.DBConnection; import dk.daoas.adressevedligehold.tasks.Task; public class AfstandAndenRuteTask extends Task { final Logger logger = Logger.getLogger( AfstandAndenRuteTask.class.toString() ); final boolean verbose = false;// static boolean test_mode; String distributor; int antalIkkeDaekkede = -1; AtomicInteger antalBeregnet = new AtomicInteger(); ThreadPoolExecutor threadPool; public AfstandAndenRuteTask(String distributor) { this.distributor = distributor; } @Override protected void taskRun() throws Exception { //Setup j.u.l Logger //Logger root = Logger.getLogger(""); //FileHandler fhandler = new FileHandler("fulddaekning.log"); // Ingen max størrelse, ingen rotation og ingen append //fhandler.setFormatter( new SimpleFormatter() ); //root.addHandler( fhandler ); Constants.init(distributor); Constants consts = Constants.getInstance(); int max_workers = ServiceConfig.getInstance().maxWorkers; if (max_workers <= 0) { logger.info("!!! AUTO-DETECT MAX_WORKERS !!!"); int cores = Runtime.getRuntime().availableProcessors(); cores -= 1;//Efterlad 1 core/cpu i reserve til systemet max_workers = Math.max(1, cores); //Dog skal der som minimum være 1 core til beregning } if (test_mode) { max_workers = 1; } logger.info("Starting with MAX_WORKERS:" + max_workers); setupThreadPool(max_workers); try (Connection conn = DBConnection.getConnection() ) { Database db = new Database(conn); Queue
ikkeDaekkede = db.hentAlleIkkedaekkedeAdresser(consts.getMinPostnr(), consts.getMaxPostnr() ); antalIkkeDaekkede = ikkeDaekkede.size(); logger.info("Antal ikke-daekkede: " + antalIkkeDaekkede ); boolean testRun= false; AtomicInteger antalFundne = new AtomicInteger(0); long beregnStart =0; long start = System.currentTimeMillis(); int antalDaekkedeAdresser = -1; if (testRun == false) { logger.info("Finder postnumre"); Set