Threads Threadprogrammierung wait() und notify()

  • Themenstarter Gelöschtes Mitglied 34244
  • Beginndatum
G

Gelöschtes Mitglied 34244

Gast
Hallo zusammen,

ich bin gerade dabei eine grafische Oberfläche zu programmieren, in der nacheinander 180 Bilder angezeigt werden. Der User kann wie bei der Windows Bildanzeige durch die einzelnen Bilder durchscrollen. Um nicht alle Bilder vorher laden zu müssen habe ich einen Thread erstellt, der die Bilder im Hintergrund läd. Jetzt möchte ich aber nicht, dass automatisch alle Bilder vorgeladen werden, sondern nur die nächsten zehn bezogen auf das Bild, welches sich der User gerade anschaut. Dazu habe ich mir die Funktionen wait() und notify() angeschaut, bin mir aber nicht sicher wie ich die in meinem Fall implementieren muss. Vereinfacht läuft folgendes ab:
Vorladethread (SwingWorker-Klasse):
Java:
for([Bilderiterator]){
if(aktuelles bild in main Thread + 10 <= i){
hauptthread.setzeAktuellGeladeneBilder(i);
wait();
}
vorladeFunktionen();
}
Hauptthread (inklusive GUI):
Java:
 onButtonClick(){
		if(aktuellesBild+10 >= AktuellGeladeneBilder){
			imageIconThread.notify();
		}
}

So bekomme ich eine IllegalMonitorStateException.
Ich habe bereits herausgefunden, dass ich etwas mit synchronized machen muss, aber da ich noch nie mit Threads gearbeitet habe, weiß ich nicht genau wie ich das in meinem Fall implementieren muss. Muss ich einen weiteren Thread erstellen, der dann den Ladethread aufruft? Wenn ja, wie benachrichtige ich diesen?

Vielen Dank!
 
Zuletzt bearbeitet von einem Moderator:

Gucky

Top Contributor
Du musst auf das Objekt, an dem du wartest, synchronisiert sein.
Also:
Java:
synchronized(syncObj){
   syncObj.wait();
}

In deinem Fall verstehe ich aber nicht die Sinnhaftigkeit von wait und notify.
 

TheWhiteShadow

Bekanntes Mitglied
@Gucky: er will den Thread am leben halten um später weitere benutzen um neue Bilder zu laden.

Ich würde dir allerdings zu einem Threadpool der Größe 1 raten. Guck dir dazu mal die ExecutorService-API an.
 

Thallius

Top Contributor
Ich würde dem Thread eine queue geben die du nach Bedarf füllst. Dann obliegt die Logik welche Bilder geladen werden sollen dem Main-Thread.

Noch optimaler fände ich es eine Thread-Queue zu machen und für jedes Bild einen eigenen Thread zu starten.

Gruß

Claus
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Java & Midi - ThreadProgrammierung Allgemeine Java-Themen 8
J java.lang.NullPointerException bei Threadprogrammierung Allgemeine Java-Themen 9
P Threadprogrammierung - zwei Threads parallel - einer beendet Allgemeine Java-Themen 3
mrbig2017 Threads wait wird nicht durch notify beendet! Allgemeine Java-Themen 3
K Multithreading: Service(Task), wait und continue Allgemeine Java-Themen 21
J Thread wait() Allgemeine Java-Themen 2
J Swing Cursor.WAIT funktioniert nicht nach JFileChooser Allgemeine Java-Themen 1
T Wait/Notify() bei Thread Allgemeine Java-Themen 6
A System freezes when trying to run external command from Java with wait for Allgemeine Java-Themen 3
B Threads Barrier mit wait()/notify() aber nicht alle Prozesse terminieren Allgemeine Java-Themen 2
P Threads abwechseln lassen mit wait() und notify() Allgemeine Java-Themen 2
M Java Threads - Wait Notify - Verständnisproblem Allgemeine Java-Themen 5
K Threads wait() und notify() Allgemeine Java-Themen 8
Q Frage zu Threads ( notify() wait() ) Allgemeine Java-Themen 6
G Thread wait, notify Allgemeine Java-Themen 4
T Threadsicheres wait() [lock erst mit wait() abgeben] Allgemeine Java-Themen 31
J synchronized block mit this und wait() Allgemeine Java-Themen 5
G Process.wait() auf Folgeprozesse mitwarten Allgemeine Java-Themen 29
H wait() and notify() mit mehreren Prozessen Allgemeine Java-Themen 14
G Thread wait() auf Nicht-Thread Klasse Allgemeine Java-Themen 5
A thread1 stoppt thread2 mit wait() und notify() ? Allgemeine Java-Themen 3
M Thread mit wait anhalten, wie weiterlaufenlassen? Allgemeine Java-Themen 3
M wait in Thread einschieben? Allgemeine Java-Themen 4
C p.wait() bremst aus Allgemeine Java-Themen 4
N java.lang.IllegalMonitorStateException: object not locked by thread before notify() Allgemeine Java-Themen 2
B notify() - was passiert danach genau? Allgemeine Java-Themen 8
L Producer/Consumer Thread mit notify auf File Allgemeine Java-Themen 5
G notify() was wird verständigt Allgemeine Java-Themen 5
K synchronized und notify / notifyAll Allgemeine Java-Themen 8
G MVC-Konzept - effizienz beim "notify" Allgemeine Java-Themen 2
M Unterschied notify() und notifyAll() Allgemeine Java-Themen 1
S Unterschied zwischen notify() und notifyAll() Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben