Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.
Aufgabe 3.5
Guten Mittag,
ich hätte da ein paar Fragen zu Aufgabe 3.5:
-
Soll das in der letzten Zeile von b) heißen “Felder” anstatt Fehler ?, denn irgendwie macht es für mich wenig Sinn Fehler zu färben.
-
Zu a) und b) mach ich irgendwas falsch, wenn die Ausgabe von beiden gleich (vollständig) aussieht ?
-
Langt es wenn die c) für nThreads <= Spalten bzw. Zeilen funktioniert ?
Schon mal vielen Dank
1.)
ja ich denke das soll Felder heißen
zu 2.)
Ja vermutlich, es besteht natürlich eine gewisse Chance, dass deine Implementierung in a) exact das gleiche tut wie in b), das ist aber doch eher unwahrscheinlich
hast du:
- random Zahlen in beiden
- in der a) sicher NICHT mögliche Probleme die durch mehrer Threads auftreten könnten in irgendeiner Form gelöst
- mehr als einen Thread zum Ausführen verwendet
zu 3.)
Dass dem immer so wäre, steht nicht in der Aufgabe. Ob das Punkterelevant ist kann ich dir nicht beantworten. (sollte aber jetzt nicht der Hammer Aufwand sein das zu überprüfen)
Erstmal danke für die Antwort
bei 2) hattest du natürlich recht, war eine { an der falschen Stelle gesetzt, trotzdem wäre es schön die korrekte Ausgabe zu wissen.
- So könnte man es halt recht leicht immer auf die Threads aufteilen, aber da man normalerweise nicht einschränkt denk ich mal werde ich es
davon unabhängig machen.
naja wie soll man denn bei Zufalszahlen eine Musterausgabe geben…
Hallo,
kurze Frage zur 3.5b):
Mein Code funktioniert an sich wunderbar, also alle Felder werden ausgemalt, auch wenn es am Ende doch relativ lange dauert. Deswegen habe ich nach der for-Schleife, in dem ich die Threads gestartet habe den Befehl e.shutdown() und anschließend (natürlich in einer try and catch Klausel) den Befehl e.awaitTermination(2, TimeUnit.MINUTES) eingegeben, um den Prozess einfach abzubrechen, wenns zu lange dauert.
Allerdings arbeitet das Programm nach 5 Minuten einfach munter weiter ohne eine Exception zu werfen … Jetzt hab ich mir zuerst gedacht, dass das vielleicht daran liegt, dass der main Thread keine Zeit bekommt. Aber so lange keine Zeit vom Prozessor zu bekommen ist schon ungewöhnlich oder?
Sorry, hat sich geklärt… hatte einen Fehler im Code zuvor, der das Erreichen der Termination Bedingung verhindert hatte <_<
Du scheinst etwas falsch verstanden zu haben. Mit awaitTermination(2, TimeUnit.MINUTES) wartet der aufrufende Thread, in deinem Fall vermutlich der Mainthread, bis entweder alle Arbeitspakete, die dem ExecutorService übergeben wurden, abgearbeitet wurden, oder die Zeitspanne vorbei ist (oder der wartende Thread unterbrochen wird, was bei der Aufgabe aber nicht passieren sollte). Durch awaitTermination werden keine Prozesse abgebrochen.
Ah okay, das war mir tatsächlich nicht bewusst. Dachte, dass die Threads die e verwalted interrupted werden, wenn die Zeit abgelaufen ist. Also das heißt, dass awaitTermination sich wirklich nur auf den aufrufenden Thread auswirkt?
[m]awaitTermination()[/m] ändert am Zustand der Arbeiterthreads des ExecutorServices nichts. Du hast es vermutlich mit [m]shutdownNow()[/m] verwechselt, welches die [m]interrupt()[/m]-Methode für jeden Arbeiterthread aufruft. [m]interrupt()[/m] setzt übrigens normalerweise nur ein Flag ([m]isInterrupted()[/m]), außer die Threads warten passiv (Methoden mit [m]throws InterruptedException[/m]), dann wird die entsprechende Exception geworfen. Hindert natürlich niemanden daran, die Exception einfach zu fangen und weiterzuarbeiten.
Frage zur b):
Soll die Ausgabe genauso, wie die aus der a) aussehen, bloß ohne “Pixelfehler”?
Danke
Die Ausgabe bei der b) sollte keine Pixelfehler aufweisen. Ansonsten sollte sie genauso aussehen.