Ich liebe diese Begrüßung XD Und das Video ist auch geil. Vorallem, wenn man versteht, was du sagst, weil man endlich genügend Wissen hat xD
@elypix27204 жыл бұрын
Danke für das gute Video! Du erfüllst mir den Traum vom programmieren lernen/können :DDDDD
@paulana0106 жыл бұрын
Super Tutorial aber bei den ganzen Threads,Freds,Flags kommt man leicht durcheinander!
@TheMorpheusTutorials6 жыл бұрын
Ja, das ist meistens recht komplex, ich habs versucht hier so gut es ging runterzubrechen
@marcojahn25645 жыл бұрын
Ich persönlich empfinde das auch immer als als störend, wenn in sämtlichen Klassen etc. alle Variablen gleich benannt sind. Insbesondere wenn die Variable auch noch wie der Datentyp heißt. Nettes Beispiel: in der Mainmethode wird per Benutzereingabe ein Name einer Person angefordert. Die Name wird in einer Stringvariable name gespeichert und diese dann beim Anlegen eines Personenobjektes als Parameter mitgegeben. Im Konstruktor wird der empfangene Wert in einer Art "Übergabevariable" gleichen Namens empfangen und sogleich an die passende Objektvariable weitergegeben, die dann auch schon wieder "name" heißt. Als Anfänger wundert man sich dann,warum dann im Kontruktor widersinnig klingende Sachen wie "this.name=name;" drinstehen.
@elypix27204 жыл бұрын
Kann ich nur bestätigen
@eZlikeYou9 жыл бұрын
Haha die Begrüßung :D nice das ich den kanal gefunden habe ;D
@Selfkill77 жыл бұрын
alter, wasn name :D
@therealmagicmonti9 жыл бұрын
cooles tut, kannst du mal ein Video machen wo erklärt wird wie zwei Threads aus unterschiedlichen Instanzen kommunizieren können.
@TheMorpheusTutorials9 жыл бұрын
***** klar gute Idee, mach ich bald
@saradruid79507 жыл бұрын
Ich habs nicht ganz verstanden. 10:00 wieso beendet das Programm überhaupt, wenn man flag immer zwischen true und false switcht? Läuft das Programm nicht unendlich weiter?
@aronck66437 жыл бұрын
Das liegt daran, dass die erste methode die zweite nicht aufruft bei einem methodenaufruf in den methoden würde es in ein Endlosschleife falle da die methode ja nur durch die Schleife in der CustomThread klasse aufgerufen wird und nicht durch die first oder second methode wird die methode nur sooft ausgeführt wie die schleife es vorgibt
@grossadmiralthrawn87692 жыл бұрын
Gutes Video als erstes. Ist es möglich auch eine unbekannte Methode (angelehnt an die generische Programmierung) zu übergeben und ausführen zu lassen?
@alphamath60592 жыл бұрын
notfify soll laut meinem Uni-Skriptum nicht verwendet werden, da es einen zufälligen Thread aufweckt
@alphamath60592 жыл бұрын
stattdessen notifyAll. Notify schlecht, risky
@soullesswolf13164 жыл бұрын
müsste damit minecraft auf mehreren threads laufen?
@SRErd-eq4pj7 жыл бұрын
Wozu braucht man eigentlich hier das 'synchronized'? Weil der erste Thread führt ya eh nur die methode first() aus und der zweite Thread führt nur die methode second() aus. Ist das synchronized dann nicht überflüssig?
@TheMorpheusTutorials7 жыл бұрын
das brauchen wir, weil beide Methoden auf die Flag zugreifen
@SRErd-eq4pj7 жыл бұрын
Was ich noch nicht richtig verstehe ist, wie zwei Threads gleichzeitig auf die SELBE variable zugreifen. wenn ich beiden Threads eine 'int counter' variable übergebe, gibt es sie in beiden Threads, also die gleiche aber zwei verschiedene Variable, thread1: 0 thread2: 0 thread1: 1 thread2: 1 ... aber wenn ich eine Klasse Counter mache mit einem Attribut counter, und diese den zwei Threads übergebe, verwenden beide das selbe attribut. thread1: 0 thread2: 1 thread1: 2 thread2: 3 ... Warum aber verwenden sie bei dem int counter nicht die selbe variable? Bzw. wie kann man das bewusst angeben, das sie auf die selbe variable zugreifen sollen?
@TheMorpheusTutorials7 жыл бұрын
Ja, das liegt an Call-by-Value, das Java auf primitiven Typen macht. Du übergibst nur den Wert der Variablen, nicht aber (wie bei einem Objekt) den Speicherort. Das heißt du erstellst im Prinzip eine Deep-Copy des Integers. Probiers mal mit einem static counter irgendwo außerhalb deiner Thread-Methoden, den du auch nicht übergibst, sondern, der einfach aufgerufen wird.
@Mosambers8 жыл бұрын
Hi, müssen es 2 Threads sein? Hintergrund ich möchte einen TCP clienten machen der synchrin laufen muss. D.h. Während ich sende darf ich nicht empfangen und erst senden wenn ich alles vom Server empfangen habe. Ich verstehe aber nicht so ganz warum es zwei mal ein und den selben Thread benötigt. Danke!
@TheMorpheusTutorials8 жыл бұрын
Hey, nein, es können beliebig viele Threads sein. D.h. du kannst einen laufen lassen (und mit deinem Hauptthread was anderes machen) oder aber über 100.
@Mosambers8 жыл бұрын
Ich habe mich glaube ich bisschen falsch ausgedrückt. Würde mich freuen wenn du es komplett durchließt, da ich seit über einem Monat dran sitze. Ich einen TCP Client Thread welche nur zum Aufbauen der Verbindung und den Emfpang zuständig ist. Dann habe ich einen Sende Thread, ich sende immer der gleichen Befehle in einer Schleife, deshalb als extra Thread. Jetzt muss ich das Synchron kriegen, da sich der Server sonst aufhängt. Ich habe ehrlich gesagt nicht den Zusammenhang von Blug mit dem Thread verstanden. Du hast hier bei dir zwei Threads laufen aber der eigentliche Code wird in Blubb ausgeführt. Heißt das für mich dann, denn die Sende und Emfangsschleife in Blubb packen und wie bei Dir mit den beiden Threads verknüpfen? Ich hoffe du verstehst was ich meine.
@TheMorpheusTutorials8 жыл бұрын
hm, naja okay, Blubb ist die Klasse. Das hat erstmal nichts zu heißen. Wichtig ist nur, dass du über die Flags synchronisierst. D.h. ein Lock erzeugst, sodass nur ein Thread auf einmal eine Variable ändern darf. Du hast quasi deinen normalen Code und dann hast du irgendwann, wenn du halt mal was übertragen möchtest, einen Abschnitt, der synchronisiert wird (wie im Video). Dort kannst du dann in Variablen schreiben, die von beiden Threads zugänglich sind. Speziell für deinen Anwendungsfall würde ich jetzt vorschlagen: Warum schreibst du nicht in eine Variable mit dem Sende-Thread und wenn der fertig ist, dann kippt er irgendeinen boolean, der angibt, ob neue Nachrichten da sind. Dann liest der Empfänger das aus, speichert es sich irgendwo und kippt das Bit wieder. Falls du zu viel senden musst, könntest du auch das Ganze 2 mal machen.
@Mosambers8 жыл бұрын
Danke erst mal, eine andere Frage. Kann es sein dass er nie bei first() in das if(flag) rein geht? Ich habe alls genau so gemacht und überall System.out.println gesetzt und das wait() wird nie ausgeführt aber komischerweise läuft es
@TheMorpheusTutorials8 жыл бұрын
hm, könnte zufälligerweise so sein, das kommt immer drauf an, wie dein Prozessor grade bestimmt, welcher Prozess als nächstes dran kommt
@panagiotisvavelidis44286 жыл бұрын
Wenn er doch in der First Methode drin ist, wieso setz ich dann erst das Flag auf True?
@TheMorpheusTutorials6 жыл бұрын
Erst wenn er fertig ist mit dem kritischen Bereich, in dem Deadlocks auftreten können
@floriangeorgmai73597 жыл бұрын
gutes Video, Danke. wir haben in SOftwaresysteme in einmal genau so ein Bsp gemacht. wuerd namensgebung aendern : statt Blubb tHREADDATA; UND METHODEN waitTrueAndChange bzw waitFalseAndChange vielleicht waere es auch gut die Ausgabe zu aendern , so wie Thread id ... changed flag to False... nochmal Danke!!