/[projects]/dao/FuldDaekningWorker/src/dk/daoas/fulddaekning/Lookup.java
ViewVC logotype

Contents of /dao/FuldDaekningWorker/src/dk/daoas/fulddaekning/Lookup.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2259 - (show annotations) (download)
Mon Feb 9 13:21:39 2015 UTC (9 years, 3 months ago) by torben
File size: 2934 byte(s)
use a threadPool instead of launching 100's of threads
1 package dk.daoas.fulddaekning;
2
3 import java.util.Map;
4 import java.util.Queue;
5 import java.util.concurrent.*;
6 import java.util.logging.Level;
7 import java.util.logging.Logger;
8
9 import dk.daoas.fulddaekning.BoundingBox.BoundingBoxException;
10
11 public class Lookup {
12
13
14
15 final static Logger logger = Logger.getLogger( Lookup.class.toString() );
16
17 String postnr;
18 Database db;
19
20 Adresse daekkedeAdresser[];
21 Queue<Adresse> queue;
22
23 Map<Integer, LookupWorker> workers = new ConcurrentHashMap<Integer, LookupWorker>();
24
25 ThreadPoolExecutor threadPool;
26
27
28
29 public Lookup(String postnr, Database db, ThreadPoolExecutor threadPool) {
30 this.postnr = postnr;
31 this.db = db;
32 this.threadPool = threadPool;
33 }
34
35
36
37 public void doLookup() throws BoundingBoxException {
38 logger.info("Starting for postnr=" + postnr);
39
40 Statistik stat = new Statistik();
41
42 long start1 = System.currentTimeMillis();
43 long start2 = 0;
44
45 try {
46
47 logger.info("Henter _ikke_ daekkede adresser i " + postnr);
48 queue = db.hentIkkedaekkedeAdresser(postnr);
49 if (queue.size() == 0) {
50 logger.info("Fandt ikke nogen _ikke_ daekkede adresser i " + postnr);
51 return;
52 }
53
54 BoundingBox bbox = db.getBoundingbox(postnr);
55 bbox.validateBbox();
56
57 logger.info("Bbox=" + bbox);
58 bbox.adjustToMargin();
59 logger.info("Bbox Adjusted=" + bbox);
60
61 logger.info("Henter daekkede adresser i " + postnr);
62 daekkedeAdresser = db.hentDaekkedeAdresser(bbox);
63
64 stat.postnr = postnr;
65 stat.antalDaekkede = daekkedeAdresser.length;
66 stat.antalIkkeDaekkede = queue.size();
67 stat.totalDataset = stat.antalDaekkede * stat.antalIkkeDaekkede;
68
69
70 logger.info("Starter beregning for " + postnr);
71 start2 = System.currentTimeMillis();
72
73 for (int i =0; i < LookupMain.max_workers; i++) {
74 LookupWorker worker = new LookupWorker(i, this);
75 /*Thread t = new Thread(worker);
76 t.start();
77
78 workers.put(i, worker);*/
79 }
80
81 while (threadPool.getActiveCount() > 0) {
82 Thread.sleep(10);//wait for worker threads
83 }
84
85 db.saveBatch();//Save any unsaved rows
86
87
88 } catch(Exception e) {
89 logger.log(Level.WARNING, "Exception during lookup", e);
90
91 if (e instanceof BoundingBoxException) {
92 logger.severe( e.getMessage() );
93 System.exit(1);
94 }
95
96 }
97 long now = System.currentTimeMillis();
98
99 stat.forbrugtTid = (now-start1);
100 LookupMain.saveStatistics(stat);
101
102 logger.info( stat.toString() );
103 logger.info("Done! elapsed=" + (now-start1) + "/" + (now-start2) + " postnr=" + postnr);
104 }
105
106
107 // Getters and setters
108
109 ///////////////////////////
110 public Database getDb() {
111 return db;
112 }
113
114
115
116 public Adresse[] getDaekkedeAdresser() {
117 return daekkedeAdresser;
118 }
119
120 public Queue<Adresse> getQueue() {
121 return queue;
122 }
123
124
125 }

  ViewVC Help
Powered by ViewVC 1.1.20