[JAVA] Threads sich selber zählen lassen
Verfasst: 25.09.2014, 12:54
Hi,
http://zfx.info/viewtopic.php?f=4&t=1457#p17525 habe ich gelesen, aber leider nicht ververnden können :(
Mein Problem ist, dass ich In einer Karte Gebäudedaten (OSM) lade. Im Idealfall habe ich diese Gebäude mit einer existierenden Wikipedia Seite verknüft. Dort wiederum hole ich mir die Bilder-URLs und möchte diese nun über dem jeweiligen Gebäude anzeigen lassen.
Soweit funktioniert es auch alles ;)
Doch da die Bilder relativ groß sind und das rezise in etwas wie 100x100 doch etwas Rechenzeit in Anspruch nimmt (es sind etwa 50-60 Bilder zu laden und zu cachen), habe ich den Ladeprozess pro Gebäude in einen separaten Thread gepackt, der sofort wieder zerstört wird, sobald das Bild geladen/gecached ist.
Nun laufe ich schön in eine "Exception in thread "Thread-172" java.lang.OutOfMemoryError: Java heap space", was auch soweit klar ist, da die Bilder teilweise riesig sind.
Nun möchte ich die Threads auf 5-10 Stück begrenzen, kann dies aber nicht von außen tun, da je nach Zoomstufe der Karte keine Stelle im Code existiert, wo ich diese schön brav hintereinader in 5 Threads abarbeiten könnte.
Ich möchte alle schon alle Threas "nahezu" gleichzeitig starten (wie bisher), denn diejenigen dessen url==null ist beenden sich eh sofort wieder.
Und nur in dem Fall, dass eine URL vorhanden ist, einen externen Counter hochzählen bzw. so lange warten, bis dieser wieder klein genug ist.
Doch wie mache ich das am besten?
Aktuell scheint er bei 5 komplett zu stoppen und lädt die restlichen nicht wirklich nach.
Grüße Oekel
http://zfx.info/viewtopic.php?f=4&t=1457#p17525 habe ich gelesen, aber leider nicht ververnden können :(
Mein Problem ist, dass ich In einer Karte Gebäudedaten (OSM) lade. Im Idealfall habe ich diese Gebäude mit einer existierenden Wikipedia Seite verknüft. Dort wiederum hole ich mir die Bilder-URLs und möchte diese nun über dem jeweiligen Gebäude anzeigen lassen.
Soweit funktioniert es auch alles ;)
Doch da die Bilder relativ groß sind und das rezise in etwas wie 100x100 doch etwas Rechenzeit in Anspruch nimmt (es sind etwa 50-60 Bilder zu laden und zu cachen), habe ich den Ladeprozess pro Gebäude in einen separaten Thread gepackt, der sofort wieder zerstört wird, sobald das Bild geladen/gecached ist.
Nun laufe ich schön in eine "Exception in thread "Thread-172" java.lang.OutOfMemoryError: Java heap space", was auch soweit klar ist, da die Bilder teilweise riesig sind.
Nun möchte ich die Threads auf 5-10 Stück begrenzen, kann dies aber nicht von außen tun, da je nach Zoomstufe der Karte keine Stelle im Code existiert, wo ich diese schön brav hintereinader in 5 Threads abarbeiten könnte.
Ich möchte alle schon alle Threas "nahezu" gleichzeitig starten (wie bisher), denn diejenigen dessen url==null ist beenden sich eh sofort wieder.
Und nur in dem Fall, dass eine URL vorhanden ist, einen externen Counter hochzählen bzw. so lange warten, bis dieser wieder klein genug ist.
Doch wie mache ich das am besten?
Code: Alles auswählen
@Override
public void run() {
String url = f.getPreferedImageUrl();
if (url == null)
return;
if (f.getImgTMP() == null && f.getImgTMPsvg() == null) {
synchronized (this) {
while (Parametric.drawConter > 5) {
try {
wait(200);
} catch (InterruptedException e) {
}
}
Parametric.drawConter++;
}
load....
Parametric.drawConter--;
}
}
Grüße Oekel