Thread Frage

oldshoe

Bekanntes Mitglied
Also ich habe eine Liste von Elementen. Für jedes Element soll ein Thread gestartet werden. Aber wie realisiere ich das wenn nur maximal 3 Threads gleichzeitig laufen sollen? Und wie erkenne ich wenn ein Thread zu Ende ist, damit ich das Ergebnis in der Datenbank speichern kann. Ich habe das mal mit join versucht, aber dann läuft auch nur ein Thread.
Hier mal mein unvollständiger (Pseudo)Code:

Java:
for(Element element:elementList){
Thread th1 = new Thread(..element..)
th1.start();
try{
th1.join();
saveToDatabase();
}catch(Exception e){
syso...
}
 
S

SlaterB

Gast
alles durch saubere Menschenarbeit zu lösen,

zum join:
erst mehrere Threads starten, dann auf alle joinen, dafür musst du die Threads in einer Liste ablegen,
auf die Ergebnisse am Ende zugreifen, irgendwo müssen die ja liegen, im Element vielleicht, sonst z.B. eigene Thread-Klasse

Begrenzung erreichst du genau auch durch normale Programmierbefehle,
z.B. eine Variable bis 3 zählen, dann joinen, wenn fertig dann 3 neue starten usw.,
 

iChaos

Aktives Mitglied
Und wie erkenne ich wenn ein Thread zu Ende ist, damit ich das Ergebnis in der Datenbank speichern kann[/code]

Hi

Kann dir leider nur teilweise antworten;

Wenn du den Thread startest, rufst du die run-Methode auf, welche mit einer while-Schleife und boolean läuft.Wenn der Thread seine Aufgabe erfüllt hast, setzt du den boolean auf false, speicherst dein Ergebnis in der DB, damit die while-Schleife nicht mehr läuft.
 

oldshoe

Bekanntes Mitglied
zum join:
erst mehrere Threads starten, dann auf alle joinen, dafür musst du die Threads in einer Liste ablegen,
auf die Ergebnisse am Ende zugreifen, irgendwo müssen die ja liegen, im Element vielleicht, sonst z.B. eigene Thread-Klasse
Wenn ich durch diese List iterieren müsste, würde ich doch auf den ersten Thread warten müssen, obwohl andere schon fertig sein könnten. Oder verstehe ich das falsch?
Java:
th1.start();
threadList.add(th1);
th2.start();
threadList.add(th2);
for(Thread th:threadList){
try{
th.join();
saveToDatabase();
}catch(Exception e){
syso...
}
}

Begrenzung erreichst du genau auch durch normale Programmierbefehle,
z.B. eine Variable bis 3 zählen, dann joinen, wenn fertig dann 3 neue starten usw.,
So müsste ich warten bis alle 3 Threads beendet sind, damit neue gestartet werden. Wie soll der Code dazu aussehen?
 
S

SlaterB

Gast
> Wie soll der Code dazu aussehen?

du hast doch den Code schon weitgehend,
und richtig, das hat den Nachteil dass du auf den langsamsten Thread warten musst, während andere vielleicht schon fertig sind und weitere gestartet werden könnten,
dass du das erkennst macht mir ja Mut,

denkbare Erweiterungen: mit drei einzelnen Kontroll-Threads nebenläufig auf die drei Arbeits-Threads warten (joinen),
widerspricht vielleicht der begrenzten Anzahl an Threads, aber diese würden hauptsächlich schlafen, nutzen vielleicht nicht die begrenzten Arbeitsressourcen usw.

oder gar kein join einsetzen sondern normales wait/ notiy an einem Objekt, welches alle 4 Partner kennen,
der Haupt-Thread wartet darauf, jeder der 3 Arbeitsthreads kann notify aufrufen und so aufwecken,
das müsste dann aber aktiv in deinem Code am Ende der run-Methode stehen, das gemeinsame Objekt müsste überall bekannt sein

beim Aufwecken schaut der Haupt-Thread, welche(r) Thread(s) beendet ist/sind, was evtl. durch einen boolean im Thread angezeigt werden muss,
denkbar dass die run-Methode noch läuft wenn aufgeweckt wird


zu wait/ notify allgemein siehe Lehrbücher falls noch nicht bekannt
Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 11 Threads und nebenläufige Programmierung

-----

ach und bevor es zuviel Einzelarbeit wird:
gibts teilweise oder sehr fortgeschritten schon fertig, Stichwort Thread-Pool, z.B. ExecutorService
 
Zuletzt bearbeitet von einem Moderator:
G

gman

Gast
Hi,

eventuell solltest du auch mal einen Blick in das Package "java.util.concurrent" werfen. Insbesondere
"CountDownLatch" könnte das richtige für dich sein.
 

andiv

Bekanntes Mitglied
Mein Vorschlag:

Verwende einen ExecutorService aus dem java.util.concurrent-package. Anbieten würde sich ein FixedThreadPool mit einer Begrenzung auf 3 Threads.

Als Liste verwendest du eine synchronisierte Queue aus der sich die Threads immer ein neues Element holen. Wenn der Thread das Element fertig bearbeitet hat packt er es in eine zweite Queue.

Ein weiterer Thread holt sich parallel dazu immer drei Elemente aus der zweiten Queue (verwende hier am besten eine BlockingQueue) und speichert sie in der Datenbank.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Threads Thread sleep() Method einfache Frage Java Basics - Anfänger-Themen 8
ralfb1105 Frage zu Thread Synchronisation mit wait() und notify() Java Basics - Anfänger-Themen 3
L Thread-Frage Java Basics - Anfänger-Themen 2
S Thread.sleep () - Frage Java Basics - Anfänger-Themen 16
A Frage zu Datenzugriff bei new Thread(new Runnable) Java Basics - Anfänger-Themen 8
M Frage zur Methode Thread.sleep() Java Basics - Anfänger-Themen 6
S Thread-Frage Java Basics - Anfänger-Themen 17
G SWT Thread Verständniss frage Java Basics - Anfänger-Themen 6
G Frage zur Thread-Programmierung Java Basics - Anfänger-Themen 5
G Thread Erzeuger-Verbraucher-Frage Java Basics - Anfänger-Themen 4
P Thread Frage Java Basics - Anfänger-Themen 7
R Frage zu Thread und aufruf von Methoden Java Basics - Anfänger-Themen 2
R Thread(Group)-Frage Java Basics - Anfänger-Themen 4
R Thread-Frage Java Basics - Anfänger-Themen 8
Leyla Thread isInterrupt Java Basics - Anfänger-Themen 18
P Meldung aus Java-Klasse in Thread an aufrufende Klasse Java Basics - Anfänger-Themen 1
A Thread XML-Dateien zusammenfügen Java Basics - Anfänger-Themen 11
F influxdb Upload in eigenem Thread Java Basics - Anfänger-Themen 2
frager2345 Thread - Methoden synchronized deklarieren Java Basics - Anfänger-Themen 10
berserkerdq2 Größter unterschied von extends thread und implements runnable? Java Basics - Anfänger-Themen 2
T Thread beenden aus zweiter Klasse Java Basics - Anfänger-Themen 4
A Thread - Synchronized Java Basics - Anfänger-Themen 10
A Thread Producer - Consumer Java Basics - Anfänger-Themen 1
A Thread-Semhapore Java Basics - Anfänger-Themen 0
A Thread Exchanger Java Basics - Anfänger-Themen 22
A Thread-Cyclicbarrier Java Basics - Anfänger-Themen 4
B In einem Thread Endlosschleife beenden Java Basics - Anfänger-Themen 19
A Thread-Verklemmung Java Basics - Anfänger-Themen 10
A Thread-Schreibe-Lese-Problem Java Basics - Anfänger-Themen 4
A Thread find number Java Basics - Anfänger-Themen 8
F Thread.sleep() Java Basics - Anfänger-Themen 5
F Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 11 at main.main(main.java:11) Java Basics - Anfänger-Themen 2
A Thread Java Basics - Anfänger-Themen 3
M Exception in thread "main" java.util.NoSuchElementException Java Basics - Anfänger-Themen 2
A Thread Java Basics - Anfänger-Themen 8
B Compiler-Fehler Fehlermeldung Exception in thread, falsche Eingabewert Java Basics - Anfänger-Themen 2
M Thread-Zustände Java Basics - Anfänger-Themen 6
CptK For-Schleife in Thread nach jedem Durchlauf pausieren Java Basics - Anfänger-Themen 35
S Kriege Fehler "Exception in thread" beim Benutzen von SubStrings. Java Basics - Anfänger-Themen 2
B Endlosschleife Thread sauber beenden Java Basics - Anfänger-Themen 19
D Java Thread wartet nur ein mal Java Basics - Anfänger-Themen 1
D Java Thread wartet nur ein mal Java Basics - Anfänger-Themen 0
O Exception in thread "main" java.lang.ArithmeticException: / by zero Java Basics - Anfänger-Themen 4
C Thread und TimerTask, Verstädnisproblem Java Basics - Anfänger-Themen 10
amgadalghabra Sorting Thread Launcher Java Basics - Anfänger-Themen 3
B Exception in thread "AWT-EventQueue-0" java.util.ConcurrentModificationException Java Basics - Anfänger-Themen 8
A Thread Java Basics - Anfänger-Themen 4
A Thread Java Basics - Anfänger-Themen 1
A Thread Java Basics - Anfänger-Themen 0
R Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 5
S Compiler-Fehler Exception in thread "main" java.lang.Error: Unresolved compilation problem: Java Basics - Anfänger-Themen 6
L Liste in anderem Thread laden Java Basics - Anfänger-Themen 1
B Thread / Prozess stoppen? Java Basics - Anfänger-Themen 22
I Compiler-Fehler Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5 Java Basics - Anfänger-Themen 3
W Thread Aufgabe - Vorgehensweise Java Basics - Anfänger-Themen 8
L Liste in anderem Thread laden Java Basics - Anfänger-Themen 0
J Threads PrograssBar update während thread Java Basics - Anfänger-Themen 13
D Compiler-Fehler Wert auf Datenbank übertragen und Sleep Thread Java Basics - Anfänger-Themen 3
Spencer Reid JavaFX Memory Thread.sleep Java Basics - Anfänger-Themen 1
S Thread.sleep mit JProgressBar Java Basics - Anfänger-Themen 1
R Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 10
J JavaFX -> SocketIO -> Thread -> Update Label Java Basics - Anfänger-Themen 13
J Thread Handling Java Basics - Anfänger-Themen 9
A Problem mit Thread.sleep Java Basics - Anfänger-Themen 4
C Thread in Methode + raus aus der Schleife Java Basics - Anfänger-Themen 10
E Threads Thread in While-Schleife nur einmal starten Java Basics - Anfänger-Themen 2
F Daten von Thread an den aufrufenden zurückgeben Java Basics - Anfänger-Themen 22
C Compiler-Fehler Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2 Java Basics - Anfänger-Themen 3
B Thread Problem Java Basics - Anfänger-Themen 7
N KeyListener in Thread Java Basics - Anfänger-Themen 0
M Thread.sleep() Funktion Java Basics - Anfänger-Themen 1
W JLabel in Main aus Thread verändern. Java Basics - Anfänger-Themen 4
D Ausgeben welcher Thread gerade Arbeitet Java Basics - Anfänger-Themen 8
N Threads Thread-Fehler Java Basics - Anfänger-Themen 2
F Thread um Uhrzeit ausführen Java Basics - Anfänger-Themen 5
F Get/Post als eigener Thread mit Rückgabe Java Basics - Anfänger-Themen 5
J Exception in thread "main" Java Basics - Anfänger-Themen 1
F Thread der auf eine Queue wartet, sicher beenden Java Basics - Anfänger-Themen 4
B Animation mit Thread(s) Java Basics - Anfänger-Themen 23
I Thread.sleep (1000); Java Basics - Anfänger-Themen 1
M Threads Jede Klasse einem Thread zuweisen Java Basics - Anfänger-Themen 7
J Java Thread cancel() und wiederbeleben Java Basics - Anfänger-Themen 4
J BouncingBalls 1 Thread Java Basics - Anfänger-Themen 3
L Fehler: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 4
J Timer oder Thread programmieren ? Java Basics - Anfänger-Themen 10
fLooojava Laufender Thread | Boolean ändern Java Basics - Anfänger-Themen 9
T Thread Pool mit Work Stealing Java Basics - Anfänger-Themen 1
R Java Thread Java Basics - Anfänger-Themen 10
J Welche Methoden laufen im neuen thread ?? Java Basics - Anfänger-Themen 9
S Java memory fehler: Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap spa Java Basics - Anfänger-Themen 5
K Thread - Methoden in die run Methode Schreiben Java Basics - Anfänger-Themen 5
N Threads Exception in thread "main"... Feher bei dem Versuch ein Radius zu berechnen Java Basics - Anfänger-Themen 4
A Code läuft nicht, Fehlermeldung Exception in thread "main" java.lang.Error: Unresolved compilation " Java Basics - Anfänger-Themen 11
V Threads Exception in Thread behandeln Java Basics - Anfänger-Themen 3
S Methoden Multi-Thread und Methoden Objects. Java Basics - Anfänger-Themen 1
J Thread erstellen (BlueJ Projekt) Java Basics - Anfänger-Themen 3
P Exception in thread "main" java.lang.NoClassDefFoundError: Java Basics - Anfänger-Themen 1
F Threads Variable aus einem Thread in main Methode? Java Basics - Anfänger-Themen 9
K Exception in thread "main" Java Basics - Anfänger-Themen 7
E Was ist ein idle-thread? Java Basics - Anfänger-Themen 1

Ähnliche Java Themen

Neue Themen


Oben