Wie die gleichzeitige Ausführung mehrerer Tasks trotz Multithreading verhindern?

Status
Nicht offen für weitere Antworten.

jherz

Mitglied
Hallo,

mein Programm soll eine Swing-Oberfläche haben über die der User mittels Aktionen in Menüs, Buttons, Listen usw. Befehle übers Netzwerk verschicken kann.
Die Sache ist jetzt die, dass ich zwar Multithreading insofern benutzen möchte dass das GUI nicht blockiert, d.h. die ganze Netzwerkgeschichte nicht im EDT möchte. Andererseits ist das Netzwerkprotokol synchron und ich muß daher verhindern das Befehl2 verschickt wird bevor die Antwort auf Befehl1 da ist.

Dazu sehe ich zwei Möglichkeiten.
1. Die GUI während wartens auf Antwort so zu beschränken (z.B. Elemente disablen) dass währenddessen nichts ausgelöst werden kann.
2. Alle Befehle die ausgelöst werden, landen in einer Queue und werden nacheinander ausgeführt.

Momentan (mit Disziplin bei der Bedienung) wird für jeden Befehl ein SwingWorker kreiert und in dessen doInBackground() ausgeführt, die Antwort wird im done() der GUI bekanntgegeben. Aber SwingWorker schert sich halt nicht um o.g. Beschränkung und der User könnte mehrere gleichzeitig auf den Weg bringen.

Jetzt meine Fragen: Gibt es noch weitere Konzepte um zu erreichen was ich möchte? Wie löst ihr sowas?
Momentan gefällt mir obige Idee 2 besser als die erste. SwingWorkers Verhalten lässt sich leider nicht modifizieren (getWorkersExecutorService() ist private). Kennt ihr ähnliche Klassen die sich modifizieren lassen oder schon das gewünschte Verhalten aufweisen?
Übersehe ich etwas?

Jürgen
 

tfa

Top Contributor
SwingWorker ist eine Runnable. Du könntest versuchen, mit einem ThreadPoolExecuter der Größe 1 zu arbeiten und die Worker dort nacheinander zu submitten.
 

jherz

Mitglied
SwingWorker ist eine Runnable. Du könntest versuchen, mit einem ThreadPoolExecuter der Größe 1 zu arbeiten und die Worker dort nacheinander zu submitten.
Stimmt, dass es das Interface bietet hatte ich übersehen.
In einer Klasse verpackt damit das Interface beschränkt werden kann (zumindest SwingWorkers execute() ist mir sonst zu gefährlich) könnte das gehen. Ich werd's mal versuchen, allerdings mit Executors.newSingleThreadExecutor().

Jürgen
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Gleichzeitige Zugriffe auf Daten auf dem Server Allgemeine Java-Themen 11
V Gleichzeitige Tastendrücke? Allgemeine Java-Themen 10
U Log4j - gleichzeitige geöffnete File handles Allgemeine Java-Themen 2
J Fehlermeldung bei Ausführung von .jar-Datei Allgemeine Java-Themen 9
S Gibt es eine Moeglichkeit die Runtime Ausführung zu analysieren..? Allgemeine Java-Themen 7
M Webservice timeout bei Ausführung der .jar Allgemeine Java-Themen 3
L Fehler bei der Ausführung einer Jar Allgemeine Java-Themen 2
S Fehlermeldungen erscheinen erst in der Ausführung des Programms Allgemeine Java-Themen 11
A einmalige Ausführung eines Methodenabschnittes Allgemeine Java-Themen 3
E Threads Ausführung in Threads ist langsamer als ohne Threads Allgemeine Java-Themen 13
B Ungewollte mehrmalige ausführung des codes Allgemeine Java-Themen 10
H Plattformunabhänginge Ausführung einer .jar Datei Allgemeine Java-Themen 8
R Internetverbindung weg bei ausführung Allgemeine Java-Themen 3
W Deserialisierung und Ausführung Allgemeine Java-Themen 2
X Prozess-Objekt nach Ausführung der destroy-Methode null oder nicht null ? Allgemeine Java-Themen 10
Daniel_L Mehrfache Ausführung desselben Threads/Tasks verhindern? Allgemeine Java-Themen 4
V Parallele Ausführung Allgemeine Java-Themen 8
D Eclipse-build vs. Jar-Ausführung Allgemeine Java-Themen 3
V Ausführung Client- oder Serverseitig? Allgemeine Java-Themen 13
I Thread eine bestimmte Zeit zur Ausführung geben Allgemeine Java-Themen 2
R ClientHTTPRequest - bei mehrfacher Ausführung? Allgemeine Java-Themen 2
K Richtige JVM für jar Ausführung? Allgemeine Java-Themen 4
F JAR-Datei-Ausführung löst Fehler aus Allgemeine Java-Themen 5
offi Drag and Drop mehrerer File aus Explorer in JTable Allgemeine Java-Themen 1
J Logging mehrerer Methoden Allgemeine Java-Themen 21
V Probleme beim Drucken mehrerer PDF's Allgemeine Java-Themen 17

Ähnliche Java Themen

Neue Themen


Oben