D
DeadMaybe
Gast
Hallo Leute,
ich habe ein Problem mit meinem Programm. Es ist sehr sehr groß, weshalb es
keinen Sinn machen würde, hier Code-Ausschnitte zu posten. Stattdessen
versuche ich mein Problem anhand eines minimalistischen UML-Diagramms zu
erläutern:
Ganz grobe Übersicht:
Die Hauptklasse besitzt einen ExecutorService der so viele Threads startet:
Dem ExecutorService werden dann Instanzen des Workers übergeben,
der die ganze wichtige Arbeit erledigt.
Die Hauptklasse besitzt außerdem eine Queue, in der Elemente stecken,
die von den Workern abgearbeitet werden müssen, sie werden also
den Workern übergeben.
Außerdem übergebe ich den Workern eine Referenz auf die Hauptklasse.
Aufgabe der Worker ist es nun, das übergebene Element abzuarbeiten
und, falls es nötig ist, neue Elemente der Queue der Hauptklasse hinzuzufügen.
Außerdem müssen die Worker alle ihre Schritte Protokollieren in einer Log-Datei.
Zugriffe auf die Queue und die Log-Datei sind natürlich synchronisiert.
===> Das funktioniert alles WUNDERBAR!!!!
ABER:
Wenn ich nun jede Message die in die Log-Datei geschrieben wird auch auf den
Outputbereich meiner Grafischen Swing-Oberfläche packen möchte... passiert
garnichts.
Sobald ich die erste Nachricht in die Log-Datei geschrieben habe und anschließend
auch an den Output-Bereich übermittle, hängt das Programm und tut garnichts mehr.
In der Log-Datei sehe ich genau den ersten Eintrag genauso wie im Output-Bereich
der grafischen Oberfläche ansonsten ist alles Tot.
Wie kann das Zustande kommen? Eigentlich dürfte das meinen Programmablauf doch
überhaupt nicht behindern oder seh ich das Falsch?
ich habe ein Problem mit meinem Programm. Es ist sehr sehr groß, weshalb es
keinen Sinn machen würde, hier Code-Ausschnitte zu posten. Stattdessen
versuche ich mein Problem anhand eines minimalistischen UML-Diagramms zu
erläutern:
Ganz grobe Übersicht:
Die Hauptklasse besitzt einen ExecutorService der so viele Threads startet:
Java:
int amountCores = Runtime.getRuntime().availableProcessors();
ExecutorService exec = Executors.newFixedThreadPool(amountCores);
Dem ExecutorService werden dann Instanzen des Workers übergeben,
der die ganze wichtige Arbeit erledigt.
Die Hauptklasse besitzt außerdem eine Queue, in der Elemente stecken,
die von den Workern abgearbeitet werden müssen, sie werden also
den Workern übergeben.
Außerdem übergebe ich den Workern eine Referenz auf die Hauptklasse.
Aufgabe der Worker ist es nun, das übergebene Element abzuarbeiten
und, falls es nötig ist, neue Elemente der Queue der Hauptklasse hinzuzufügen.
Außerdem müssen die Worker alle ihre Schritte Protokollieren in einer Log-Datei.
Zugriffe auf die Queue und die Log-Datei sind natürlich synchronisiert.
===> Das funktioniert alles WUNDERBAR!!!!
ABER:
Wenn ich nun jede Message die in die Log-Datei geschrieben wird auch auf den
Outputbereich meiner Grafischen Swing-Oberfläche packen möchte... passiert
garnichts.
Sobald ich die erste Nachricht in die Log-Datei geschrieben habe und anschließend
auch an den Output-Bereich übermittle, hängt das Programm und tut garnichts mehr.
In der Log-Datei sehe ich genau den ersten Eintrag genauso wie im Output-Bereich
der grafischen Oberfläche ansonsten ist alles Tot.
Wie kann das Zustande kommen? Eigentlich dürfte das meinen Programmablauf doch
überhaupt nicht behindern oder seh ich das Falsch?