Threads und trotzdem keine Nebenläufigkeit

Status
Nicht offen für weitere Antworten.

Weisswurst

Aktives Mitglied
Hi!

Ich habe einen Swing Dialog, mit einer Liste und einem Datamodel.
Beim Aufbau des Dialogs werden zwei Threads gestartet.
Der eine besorgt von einigen Rechnern über Netzwerk Informationen, der andere Pollt an einer anderen Stelle
nach einer Triggerdatei.

Momentan sieht die Sache so aus:
- Dialog wird aufgebaut (Dialogelemente platziert)
- Threads werden gestartet
- Dialog wird sichtbar gemacht

Über log4j Ausgaben kann ich jetzt sehen, dass beide Threads laufen und Abwechselnd Meldungen rausschreiben.
Zur Info: Der Datensammelthread wartet per Timer erst noch ein Weilchen. Solange der wartet kann ich den Dialog verwenden (rumklicken) und der Monitorthread pollt regelmssig.

Sobald aber der Sammelthread loslegt geht gar nix mehr. Der Dialog is eingefrohren und der Pollthread schreibt keine Logs mehr raus. Dafür tut der Datensammler wofür er gedacht ist. Sobald er fertig ist und sein Timer wieder läuft kann ich auch wieder in dem Dialog rumklicken und sehe Logs vom Poller.

Ich kann heute leider nicht auf den Quellcode zugreifen, sonnst würde ich posten wie die Threads aussehen.
Soweit ich mich erinnere werden die Threads über die Methode "Start" angestossen und haben in "Run" eine
Endlosschleife laufen.

Letztendlich ist meine Frage wie ich es hinkriege, dass der Dialog immer benutzbar bleibt. Das der eine Thread den anderen blockiert ist im konkreten Fall nicht dramatisch.

Danke schonmal!

Gruß
Wurst
 
S

SlaterB

Gast
mein Java-Programm produziert grüne Kaugummis,
ich habe zwar keinen Quellcode aber frage schonmal, woran das liegt..

fahre testweise die Arbeit des Sammelthreads auf 0 durch immer mehr und schließlich nur noch Thread.sleep()s,
wenn trotzdem alles blockiert ist, dann läuft da wohl was NICHT nebenläufig
 

Niki

Top Contributor
Du musst den anderen Threads Zeit geben, dass sie etwas machen können. Wenn ein Thread immer 100% der CPU frisst, können die anderen natürlich nichts machen. Bau einfach in jedem Schleifenintervall ein Thread.sleep(10) oder ein Thread.yield() ein. Das sollte das Problem eigentlich lösen.
 

CK

Aktives Mitglied
schau mal bei SwingUtilities und invoke later damit die Oberfläche bedienbar bleibt. Fressen aber dein Threads die gesammte CPU Last bringt das auch nix mehr.
 

Weisswurst

Aktives Mitglied
SlaterB hat gesagt.:
mein Java-Programm produziert grüne Kaugummis,
ich habe zwar keinen Quellcode aber frage schonmal, woran das liegt..

Ich sagte ich habe heute keinen Zugriff auf den Quellcode...
Der liegt auf dem SVN und ich habe hier keine lokale Kopie im Zugriff.

SlaterB hat gesagt.:
fahre testweise die Arbeit des Sammelthreads auf 0 durch immer mehr und schließlich nur noch Thread.sleep()s,
wenn trotzdem alles blockiert ist, dann läuft da wohl was NICHT nebenläufig

Tatsächlich ist der Sammelthread hauptsächlich mit warten auf Antworten von den ganzen Rechnern beschäftigt, die er abklappert.

Gehe ich recht in der Annahme, dass ich so lange mit Sleep rumexperimentieren muss, bis die Threads laufen und mein Dialog trotzdem noch flüssig bedienbar bleibt?

Das Problem ist, dass manche Rechner 20 bis 30 Sekunden brauchen bis sie Antworten. Abgefragt werden die Infos über ein XML File, dass per UNC geholt wird. An der Stelle an der, der UNC Zugriff erfolgt würde dann also mein Dialog auf jeden Fall still stehen?

Niki hat gesagt.:
oder ein Thread.yield() ein. Das sollte das Problem eigentlich lösen.

In der Doku steht, "Causes the currently executing thread object to temporarily pause and allow other threads to execute." Kann man das so interpretieren, dass der Thread dann automatisch zu gegebener Zeit weiter macht
oder muss ich den wieder aufwecken?
 

Niki

Top Contributor
Ein Thread kann sich in unterschieldichen Status befinden:
Blocked, Waiting, Sleeping
Runnable
Running

Runnable heißt, er wäre zwar bereit um etwas zu tun, hat aber vom Scheduler noch keine Zeit zum Laufen bekommen. Running heißt, er läuft tatsächlich. Das heißt also, dass der Scheduler entscheidet, welcher Thread tatsächlich gerade Zeit bekommt. Du kannst es eben nur mit yield bzw. sleep ein wenig steuern. Oder du spielst dich mit wait und notify. Da musst du dann halt aufpassen, dass du in keinen Deadlock rennst.
 

Weisswurst

Aktives Mitglied
Genau, ich dachte eigentlich, dass der Scheduler meinen Datensammler von Zeit zu Zeit von der CPU holen würde und mal meinen Dialog ran lassen würde.

Ich werde morgen mal mit sleep und yield spielen. Blöd nur, dass ich damit vermutlich die 20 Sekunden locks nicht in den Griff bekomme in denen die JVM wartet bis der andere Rechner endlich die Datei rausrückt...

Auf jeden Fall vielen Dank für die Tipps!
 

Niki

Top Contributor
Naja, wenn ein Thread auf irgend etwas wartet müsste er sich ja im blocked-Modus befinden. Daher sollten eigentlich eh andere Threads Zeit bekommen. Zumindest ist das glaub ich bei I/O Operationen so.
 

Weisswurst

Aktives Mitglied
Genau, weil eigentlich inzwischen eigentlich eh das Betriebssystem rennt um die Datei zu organisieren.
Aber vlt. gilt das nur wenn man auf dem lokalen Rechner I/O Operationen anstösst.
 

byte

Top Contributor
Ohne den Code zu sehen, kann man eh nur raten, was bei Dir schief läuft. Das ist sinnlos!
 

Roland

Mitglied
Ich finde "Rumraten" gar nicht so schlecht... Das macht einen Thread erst interessant und das meine ich jetzt nicht ironisch.
Jeder der ein ähnliches Problem hat und zufällig auf den Thread hier stößt kriegt doch schonmal einige Möglichkeiten aufgezeigt worans liegen könnte bzw. in welche Richtung er suchen muss.

Wenn Weisswurst sofort Code präsentiert hätte, dann hätte es evtl. nen knappen Hinweis auf den Fehler gegeben und Schluss.

Ich als hauptsächlicher Mitleser finde sowas schon interessant :)
 

Weisswurst

Aktives Mitglied
Sehe das ähnlich wie Roland.
Wenn ich in rl mit nem anderen Programmierer über ein Problem rede, dann heißts auch
schau mal ob du XY hast.

Ich kann aber auch verstehen warum sich Slater und byto aufregen. Klar ist eine definitive Lösung kanns ohne QC nicht geben. Ich hätte natürlich auch die Frage erst morgen stellen können, wenn ich wieder dran bin...
Hätte damit aber den heutigen Tag in der Sache ungenutzt verstreichen lassen.
 

Weisswurst

Aktives Mitglied
So, endlich komme ich mal wieder zu diesem Thema.

Ich habe nun ein paar Sleeps gesetzt und es ist tatsächlich so, dass meine Liste im Hauptdialog neu sortiert wird, sobald der Thread in die Sleep Methode läuft. Ich habe jetzt aber immernoch das Problem, dass in den Methoden
control.read...IntoDModel über UNC (Netzwerk) auf ein File zugegriffen wird.

File dummy = new File("\\\\" + ipserver+ "\\d$\\...)

Während dieses Zugriffs, der wie gesagt bei manchen Rechnern 20 bis 30 Sekunden dauern kann, hängt meine Gui, weil der Thread wartet und nicht für andere Threads platz macht.

Ist jetzt die einizigste Möglichkeit meine Control Klasse in der eigentlich die ganze Anwendunslogik ist in nen Thread (Swingworker???) zu verpacken? Und und dann die Dateien in der doInBackground Methode zu lesen und dann über die done Methode den aufrufenden Thread zu benachrichtigen, dass die Datei da ist. dass der dann die nächste
read... Methode aufruft?

Code:
public void run()
	{
		
		timer = new Timer(360000, this);
		timer.setInitialDelay(1);
		timer.start();
		
		do
		{
						
		}while(true);
	}

Code:
//Wird vom Timerevent gestartet
private void updateServerData()
	{
		
		DataModel dm = new DataModel();
		List<? extends SortKey> keyList = sorter.getSortKeys();
		int selRow = table.getSelectedRow();
		int selCol = table.getSelectedColumn();
		
		try
		{
			control.readServerListFromDB();
			this.sleep(10);
			control.readServerListIntoDModel(dm);
			this.sleep(10);
			control.readSession1IntoDModel(dm); 
			this.sleep(10);
			control.readVersion1IntoDModel(dm);
			
			
		} catch (DBErrorException e)...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
frager2345 Threads -> Ereignisbehandlung AWT, Swing, JavaFX & SWT 2
N jFrame löscht am Ende des Threads alles AWT, Swing, JavaFX & SWT 2
J GUI Ausgaben aus Threads AWT, Swing, JavaFX & SWT 13
A Swing ProgressBar über 2 parallel laufende Threads AWT, Swing, JavaFX & SWT 2
N JavaFX Logging des JavaFX Application Threads mit Log4J AWT, Swing, JavaFX & SWT 3
U JAVAFX observer und threads AWT, Swing, JavaFX & SWT 1
J Textlabel verändern mit parallelen Threads AWT, Swing, JavaFX & SWT 7
Sugan Inhalte mit Threads ändern -> java.lang.IllegalStateException AWT, Swing, JavaFX & SWT 6
R Straßenkreuzung - Ampeln mit Threads koordinieren AWT, Swing, JavaFX & SWT 5
C Threads Swing AWT, Swing, JavaFX & SWT 11
Z JavaFX Threads AWT, Swing, JavaFX & SWT 4
T hallo, habe ein Problem mit dem pro. eines Threads AWT, Swing, JavaFX & SWT 4
M Threads - nicht erklärbare Exception AWT, Swing, JavaFX & SWT 6
R Repaint() in Schleifen, Threads AWT, Swing, JavaFX & SWT 13
S Java Swing GUI mit MVC und Threads AWT, Swing, JavaFX & SWT 6
M Frage zu Threads AWT, Swing, JavaFX & SWT 3
C JTextArea scrollt bei append(String) aus Threads nicht ans Ende AWT, Swing, JavaFX & SWT 7
K Threads - Timer - run() mehrfach parallel? AWT, Swing, JavaFX & SWT 2
B GUI mit Threads aufbauen AWT, Swing, JavaFX & SWT 5
E Threads Ausgaben in GUI anzeigen lassen AWT, Swing, JavaFX & SWT 14
P JavaFX 2 (2.1 Beta) Threads AWT, Swing, JavaFX & SWT 7
B Threads in Swing AWT, Swing, JavaFX & SWT 4
M Problem mit Threads AWT, Swing, JavaFX & SWT 64
R Swing Java Swing Gui und nebenläufige Threads AWT, Swing, JavaFX & SWT 4
S Swing Threads Windows 7 64 bit AWT, Swing, JavaFX & SWT 12
J Threads + JFrame AWT, Swing, JavaFX & SWT 4
R Java threads und synchronized AWT, Swing, JavaFX & SWT 15
R Swing Swing und die Threads AWT, Swing, JavaFX & SWT 9
N Swing Threads sollen Tabtitel zur Laufzeit ändern AWT, Swing, JavaFX & SWT 4
S Gui und Aufgaben Threads AWT, Swing, JavaFX & SWT 12
M Zugriff paralleler Threads auf selbes JTextPane AWT, Swing, JavaFX & SWT 6
B Frage zu Swing,Threads, SwingWorker und Socket Communikation AWT, Swing, JavaFX & SWT 4
M Prioritäten bei SwingWorker / Threads AWT, Swing, JavaFX & SWT 9
B Swing GUI und Threads AWT, Swing, JavaFX & SWT 4
R Korrektes manipulieren der GUI aus anderen Threads heraus AWT, Swing, JavaFX & SWT 19
S Threads und Layout AWT, Swing, JavaFX & SWT 9
S Threads in einen Frame zeichnen lassen (Paint()?!) AWT, Swing, JavaFX & SWT 5
W GUI in mehreren Threads AWT, Swing, JavaFX & SWT 5
F Swing Anfängerproblem Threads AWT, Swing, JavaFX & SWT 6
S Swing Threads und das Ändern des Hintergrundes ... AWT, Swing, JavaFX & SWT 2
S Zeichnen in Threads AWT, Swing, JavaFX & SWT 4
T Auf Ende von mehreren Threads warten, ohne den EDT zu blockieren AWT, Swing, JavaFX & SWT 1
J SWT SWT und Threads AWT, Swing, JavaFX & SWT 5
borobudur SWT SWT-Framework und Threads AWT, Swing, JavaFX & SWT 12
W Threads nacheinander aufführen AWT, Swing, JavaFX & SWT 5
A Swing und Threads AWT, Swing, JavaFX & SWT 8
B JProgressbar wird nicht aktualisert, trotz Threads AWT, Swing, JavaFX & SWT 6
K Timer und Threads ruckeln für Fotoschwenk AWT, Swing, JavaFX & SWT 3
S JProgressBar und Threads AWT, Swing, JavaFX & SWT 11
G Probleme mit jList und Threads. AWT, Swing, JavaFX & SWT 3
R Swing & Threads AWT, Swing, JavaFX & SWT 4
R 2 Threads nacheinander. Einer terminiert, der andere nicht. AWT, Swing, JavaFX & SWT 9
J Unterschied zwischen SwingWorker und Threads AWT, Swing, JavaFX & SWT 4
P Threads und Swing bzw. AWT AWT, Swing, JavaFX & SWT 15
G Fenster erst nach Stoppen des Threads anzeigen AWT, Swing, JavaFX & SWT 3
N Threads kein neues Fenster erzeugen lassen AWT, Swing, JavaFX & SWT 4
G problem mit threads/repaint ! AWT, Swing, JavaFX & SWT 2
W Swing, 2 JProgressbars und threads geht das? AWT, Swing, JavaFX & SWT 2
A JTextArea und Threads AWT, Swing, JavaFX & SWT 9
B Probleme mit GUI und Threads AWT, Swing, JavaFX & SWT 17
E repaint(), EDT-Warteschlange und Threads AWT, Swing, JavaFX & SWT 26
S Threads in Java AWT, Swing, JavaFX & SWT 22
G AWT + Threads = nicht gut :P AWT, Swing, JavaFX & SWT 6
F Verständis Problem zu Threads AWT, Swing, JavaFX & SWT 2
M Swinganwendung Threads mit JProgressBar AWT, Swing, JavaFX & SWT 7
V Problem mit Aktualisieren von JList mit Threads AWT, Swing, JavaFX & SWT 3
U FileChooser Layout - Threads? AWT, Swing, JavaFX & SWT 17
R JProgressBar ohne Threads verwenden AWT, Swing, JavaFX & SWT 6
I JList, AbstractListModel und nebenläufige Threads AWT, Swing, JavaFX & SWT 2
S "Millionen" von Threads? Programm komplett beenden AWT, Swing, JavaFX & SWT 2
M Konsolenprg-Ausgabe in GUI geleitet - Brauche ich Threads? AWT, Swing, JavaFX & SWT 2
K Swing und Threads AWT, Swing, JavaFX & SWT 11
M Threads in Swing? AWT, Swing, JavaFX & SWT 2
C Schweres Problem mit JDialog und Threads! Anzeige blockiert! AWT, Swing, JavaFX & SWT 5
N Netzwerk-Applikation, SWT und Threads AWT, Swing, JavaFX & SWT 4
R createBufferStrategy() und Threads AWT, Swing, JavaFX & SWT 5
D Threads unter JFrame AWT, Swing, JavaFX & SWT 2
G Nochmal Threads und Einfrieren des GUI :( AWT, Swing, JavaFX & SWT 10
V Swing & Threads ??? AWT, Swing, JavaFX & SWT 3
D Problem mit JProgressBar und Threads AWT, Swing, JavaFX & SWT 7
D SWT TreeViewer: Daten aus Model gelöscht... trotzdem noch im Baum AWT, Swing, JavaFX & SWT 4
B Swing JDialog modal, aber trotzdem Frame auswählbar AWT, Swing, JavaFX & SWT 2
T disabled Checkbox soll trotzdem Focus bekommen AWT, Swing, JavaFX & SWT 9
K Modaler Dialog aber trotzdem Aktualisierung des MainFrames AWT, Swing, JavaFX & SWT 6
P JPanel: LayoutManager und trotzdem absolut positionieren? AWT, Swing, JavaFX & SWT 3
J MouseEvts durch JLabel fallen lassen aber trotzdem Tooltips? AWT, Swing, JavaFX & SWT 5
L Warten, aber trotzdem "lebende" UI AWT, Swing, JavaFX & SWT 2
F JTable Grid ausgeschaltet . aber trotzdem sichtbar AWT, Swing, JavaFX & SWT 3
K paint-Methode überschrieben - trotzdem JComponenten zeichnen AWT, Swing, JavaFX & SWT 5
ExceptionOfExpectation JMenu, setMnemonic(Char k) bringt keine Wirkung AWT, Swing, JavaFX & SWT 8
V JavaFX Bild leer und keine Fehlermeldung AWT, Swing, JavaFX & SWT 21
S JavaFX WebView zeigt keine Animation AWT, Swing, JavaFX & SWT 5
ruutaiokwu SWT "Google Window Builder" tut keine jar's ins Projekt rein bei SWT-Projekt AWT, Swing, JavaFX & SWT 22
H String teilen, damit bei JLabel keine Punkte am Ende angezeigt werden AWT, Swing, JavaFX & SWT 4
L Java FX Keine Anzeige Im Tableview AWT, Swing, JavaFX & SWT 4
richis-fragen JTree +/- verschwidet wenn Knoten keine Kinder hat... AWT, Swing, JavaFX & SWT 6
S java.fxml.load.exception und keine automatische Aktualliseriung der Mainausgabe AWT, Swing, JavaFX & SWT 5
F JList zeigt keine Einträge mehr AWT, Swing, JavaFX & SWT 1
G Swing JButton - Keine Klickanimation AWT, Swing, JavaFX & SWT 4
G JavaFX - Während AudioRecording keine Text eingabe TextField möglich AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen

Neue Themen


Oben