# Threads + Dualcore = Probleme mit dem Output auf der Konsole



## jan10101 (7. Mai 2007)

Hallo,

ich habe folgendes Problem. Ich habe ein Java Programm mit mehreren Threads, die beide mit System.out.print Sachen auf der Konsole ausgeben. Nur scheinbar werden die Threads zwischen den Prozessoren aufgeteilt und es gibt zwei Output Fenster die abwechselnd angezeigt werden.

Mir wird also auf der Konsole erst kurz der komplette Output des einen Threads angezeigt, dann für ganz kurze Zeit der komplette Output des anderen... dann wieder der vom ersten usw.

Ich hoffe ihr versteht was ich meine. Jedenfalls kann ich so die Ausgaben nicht richtig lesen.

Gibt es eine möglichkeit, wie ich die beiden Outputs zusammenfügen kann oder wie ich vll zwei Konsolen Fenster (also für jeden Output einen) anzeigen zu lassen?

oder irgendne andere möglichkeit? 

Achja ich benutze Eclipse...


----------



## Wildcard (7. Mai 2007)

Einen Präfix davor und mit grep filtern?


----------



## jan10101 (7. Mai 2007)

Das geht ja leider nicht. Der Output vom dem einen Thread ist nur ein paar Millisekunden zu sehen. Danach verschwindet er wieder komplett und der andere Output wird komplett angezeigt... So schnell kann ich den Text aus der Konsole gar nicht kopieren...


----------



## Wildcard (7. Mai 2007)

Leite den OutputStream in eine Datei um und fertig.
Für sowas kann man auch AspectJ nehmen, dann bleibt der Programmcode unberührt.


----------



## Wildcard (7. Mai 2007)

Oder von Konsole starten und direkt pipen...


----------



## jan10101 (8. Mai 2007)

Was genau macht denn AspectJ? Kann ich den Output dann auch während der ausführung anschauen? oder nur danach?


----------



## kleiner_held (8. Mai 2007)

Oder ein richtiges Logging-Framework anstelle von System.out verwenden.
Obwohl mir das beschriebene Verhalten bei genauerem Überlegen sehr seltsam vorkommt.


----------



## Wildcard (8. Mai 2007)

http://de.wikipedia.org/wiki/AspectJ
Danach. Das kannst du nehmen um den Stream umzuleiten wenn du das nicht in den SourceCode schreiben möchtest.


----------



## Wildcard (8. Mai 2007)

kleiner_held hat gesagt.:
			
		

> Obwohl mir das beschriebene Verhalten bei genauerem Überlegen sehr seltsam vorkommt.


Warum?
Wenn 2 Threads printlns machen ist es vollkommen normal das sich die Ausgabe vermischt. Wie sollte es denn sonst aussehen?


----------



## kleiner_held (8. Mai 2007)

Es mag ja sein, dass sich die Ausgaben vermengen und schlimmstenfalls unleserlich werden. Aber das die Konsole zwischen 2 verschiedenen Ansichten hin- und herwechselt - ich weiss nicht, das deckt sich nicht mit meinem Verständnis von In- und OutpuStreams eines Prozesses (die JVM ist ja nur ein Prozess, alle Threads sind maximal Childprozesse im Prozesstree des Betriebssystems). Um welches Betriebssystem und welche JVM es sich handelt würde mich schon interessieren.


----------



## Wildcard (8. Mai 2007)

Das habe ich auch nicht ganz verstanden, aber die Eclipse Konsole ist eben auch wieder etwas anderes als eine echte.


----------



## kleiner_held (8. Mai 2007)

Wildcard hat gesagt.:
			
		

> Das habe ich auch nicht ganz verstanden, aber die Eclipse Konsole ist eben auch wieder etwas anderes als eine echte.



Nagut, das könnte natürlich der Grund sein, interessant wäre sicherlich das Verhalten ausserhalb der Eclipse-Umgebung.
Edit:
Ich wollte einfach nur die Möglichkeit ansprechen, dass eine andere, nicht naheliegende Fehlerursache vorliegt, z.B. das aus Versehen das Programm 2 mal gestartet wurde und jetzt die unterschiedlichen JVMs immer die Eclipse Console hin- und herswitchen


----------



## NTB (8. Mai 2007)

Äh nö... das beschriebene Verhalten tritt meiner Meinung nach nur dann auf, wenn man zwei verschiedene Anwendungen in Eclipse startet.
Nichtsdestotrotz würde ich da glaub ich beide in eine Datei loggen lassen.


----------

