Java für Fortgeschrittene - Multithreading 3 - Deadlocks [GERMAN/DEUTSCH]

  Рет қаралды 30,694

The Morpheus Tutorials

The Morpheus Tutorials

Күн бұрын

Пікірлер: 38
@MiauRizius
@MiauRizius 3 жыл бұрын
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
@elypix2720
@elypix2720 4 жыл бұрын
Danke für das gute Video! Du erfüllst mir den Traum vom programmieren lernen/können :DDDDD
@paulana010
@paulana010 6 жыл бұрын
Super Tutorial aber bei den ganzen Threads,Freds,Flags kommt man leicht durcheinander!
@TheMorpheusTutorials
@TheMorpheusTutorials 6 жыл бұрын
Ja, das ist meistens recht komplex, ich habs versucht hier so gut es ging runterzubrechen
@marcojahn2564
@marcojahn2564 5 жыл бұрын
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.
@elypix2720
@elypix2720 4 жыл бұрын
Kann ich nur bestätigen
@eZlikeYou
@eZlikeYou 9 жыл бұрын
Haha die Begrüßung :D nice das ich den kanal gefunden habe ;D
@Selfkill7
@Selfkill7 7 жыл бұрын
alter, wasn name :D
@therealmagicmonti
@therealmagicmonti 9 жыл бұрын
cooles tut, kannst du mal ein Video machen wo erklärt wird wie zwei Threads aus unterschiedlichen Instanzen kommunizieren können.
@TheMorpheusTutorials
@TheMorpheusTutorials 9 жыл бұрын
***** klar gute Idee, mach ich bald
@saradruid7950
@saradruid7950 7 жыл бұрын
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?
@aronck6643
@aronck6643 7 жыл бұрын
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
@grossadmiralthrawn8769
@grossadmiralthrawn8769 2 жыл бұрын
Gutes Video als erstes. Ist es möglich auch eine unbekannte Methode (angelehnt an die generische Programmierung) zu übergeben und ausführen zu lassen?
@alphamath6059
@alphamath6059 2 жыл бұрын
notfify soll laut meinem Uni-Skriptum nicht verwendet werden, da es einen zufälligen Thread aufweckt
@alphamath6059
@alphamath6059 2 жыл бұрын
stattdessen notifyAll. Notify schlecht, risky
@soullesswolf1316
@soullesswolf1316 4 жыл бұрын
müsste damit minecraft auf mehreren threads laufen?
@SRErd-eq4pj
@SRErd-eq4pj 7 жыл бұрын
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?
@TheMorpheusTutorials
@TheMorpheusTutorials 7 жыл бұрын
das brauchen wir, weil beide Methoden auf die Flag zugreifen
@SRErd-eq4pj
@SRErd-eq4pj 7 жыл бұрын
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?
@TheMorpheusTutorials
@TheMorpheusTutorials 7 жыл бұрын
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.
@Mosambers
@Mosambers 8 жыл бұрын
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!
@TheMorpheusTutorials
@TheMorpheusTutorials 8 жыл бұрын
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.
@Mosambers
@Mosambers 8 жыл бұрын
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.
@TheMorpheusTutorials
@TheMorpheusTutorials 8 жыл бұрын
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.
@Mosambers
@Mosambers 8 жыл бұрын
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
@TheMorpheusTutorials
@TheMorpheusTutorials 8 жыл бұрын
hm, könnte zufälligerweise so sein, das kommt immer drauf an, wie dein Prozessor grade bestimmt, welcher Prozess als nächstes dran kommt
@panagiotisvavelidis4428
@panagiotisvavelidis4428 6 жыл бұрын
Wenn er doch in der First Methode drin ist, wieso setz ich dann erst das Flag auf True?
@TheMorpheusTutorials
@TheMorpheusTutorials 6 жыл бұрын
Erst wenn er fertig ist mit dem kritischen Bereich, in dem Deadlocks auftreten können
@floriangeorgmai7359
@floriangeorgmai7359 7 жыл бұрын
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!!
@TheMorpheusTutorials
@TheMorpheusTutorials 7 жыл бұрын
danke fürs Zusehen :)
Java Multithreading #4 - Kommunikation zwischen Prozessen
14:21
The Morpheus Tutorials
Рет қаралды 15 М.
Multithreading in Java Explained in 10 Minutes
10:01
Coding with John
Рет қаралды 993 М.
When you have a very capricious child 😂😘👍
00:16
Like Asiya
Рет қаралды 18 МЛН
How to treat Acne💉
00:31
ISSEI / いっせい
Рет қаралды 108 МЛН
BAYGUYSTAN | 1 СЕРИЯ | bayGUYS
36:55
bayGUYS
Рет қаралды 1,9 МЛН
Java für Fortgeschrittene - Generics
6:38
The Morpheus Tutorials
Рет қаралды 44 М.
How detect and resolve DeadLocks in Java
10:57
Defog Tech
Рет қаралды 86 М.
Linux als Hauptsystem für ca  5 Monate | Mein Fazit | Weg von Windows
12:39
Java threads 🧵
16:01
Bro Code
Рет қаралды 128 М.
Java für Fortgeschrittene - Erste Schritte in Swing
11:29
The Morpheus Tutorials
Рет қаралды 47 М.
Are Programmers Becoming Obsolete? My 3-Year Insight
47:24
The Morpheus Tutorials
Рет қаралды 96 М.