Zum Inhalt springen

Ulfmann

Mitglieder
  • Gesamte Inhalte

    1.350
  • Benutzer seit

  • Letzter Besuch

  • Tagessiege

    14

Alle Inhalte von Ulfmann

  1. Und was is mit Basketball? Da hast ma locker 150-200 Körbe. (Nur) Daran kann man keine Qualität messen. Aber ich will hier nich gegen Windmühlen kämpfen und spare mir eine Schilderung, warum auch ein 0:0 ein spannendes, gutes Spiel sein kann. :old
  2. Und das meine ich ja getan zu haben. Wenn nichts zu tun, warte, wenn wieder aktiv, prüfe Bedingung, noch nicht erfüllt ? weiter warten, sonst leg los. Entweder wir reden aneinander vorbei oder ich seh/verstehe hier den fehlenden Punkt einfach nicht. Sollte sich dein Einwand auf obige Schleife beziehen, bitte mal abändern oder deutlich mit dem Finger drauf zeigen.
  3. Ja, so würde ich es auch formulieren. Ich hab im ersten Jahr das Handbuch der Java-Programmierung durchgekaut und mich an langsam schwieriger werdenden Problemstellungen entlang gehangelt. Dieses Buch (und sicherlich auch zahlreiche Andere) beginnt bei 0, sprich bei Grundlagen der Sprache, Datentypen, Verzweigungen, Schleifen, geht dann über zu objektorientierten Konzepten (Was sind Methoden, Was sind Objekte und Klassen, Wozu macht man das, usw). Ich kann's nur weiter empfehlen, muss dazu aber sagen, dass ich immer Spaß an Selbstudium hab.
  4. In Ordnung, verstehe. Für eine solche Anforderung ist meine Implementierung dann warscheinlich nicht geeignet (was mich ein bisschen neugierig auf einen alternativen Vorschlag macht). Grundsätzlich wollte ich aber in der Tat nur ein einfaches Praxisbeispiel zur "Steuerung" von 2 Threads programmieren, die mit wait() und notify() arbeitet. Und auch, wenn ich jetzt in Gefahr laufe, Punktabzug für den sauberen Stil zu bekommen - für 2 (und nur 2) Threads ist es doch korrekt gelöst. (?) Wie gesagt, dies soll lediglich die Theorie für den SCJP festigen und danke nochmals für die Hilfestellung bis hierhin.
  5. Ja Mensch, so ein Ärger. Ich könnt mir kaum ein besseren Geburtstag vorstellen, an dem sich ein deutsches Team an die europäische Spitze spielt *Glücksträne wegwisch*
  6. *Gesprächsthema such* Und? Was glaubt ihr, wer wird Meister? :floet:
  7. Ich muss gestehen, deinen Einwand nicht nachvollziehen zu können Dies hab ich so aber gar nicht beabsichtigt, da ich es logischer und sinnvoller finde (um mal den Praxisbezug zu halten), dass der Empfänger nicht dauernd grundlos zum leeren Postkasten rennt, sondern eben dort wartet, bis der PostMan winkt und mittels notify sagt, "Ok, Post is da, du bist wieder runnable". Damit kann ich auch beim besten Willen nicht erkennen, wo dieser Fall: ... auftreten kann. Die beiden For-Schleifen sind stets maximal eine Iteration auseinander und wenn das der Fall ist, wird gewartet, hier ein Indiz dafür: Ich behaupte auch, dass das Programm immer mit/nach dem Empfänger-Thread beendet wird. Auch wenn dieser im ersten Durchlauf "vorangeht", muss er den PostMan vorlassen, weil er (ohne dessen Resultat) nicht weiter machen kann. Wie gesagt, ich erkenne da den Punkt nicht, wo ein Dead Lock entstünde, wenn dieser Wechsel stets klappt.
  8. Den relevanten Code postest du nicht. Hast du ans Serialisieren gedacht? ObjectOutputStream (Java Platform SE 6) Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 14.12 Persistente Objekte und Serialisierung
  9. Moin, kleine Bitte: benutze die Code-Tags für deinen Quelltext. Wobei genau? Was klappt nicht? Ist das File leer? Kommt Murks raus? Gibt es eine Exception? Beschreib dein Problem bitte genauer.
  10. Danke für die Hinweise, auf das Problem bin ich unterwegs tatsächlich einige Male gestoßen - insbesondere in solchen Fällen, wo wait() und notify() nicht an der richtigen Stelle aufgerufen wurden (mitunter erhielt ich dann eine IllegalMonitorStateException). Dieses Dilemma meine ich aber - und ich bitte um Kritik - hier umgangen zu haben: while (mailbox.hasMail() == false) { try { mailbox.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } act(); mailbox.notify(); Solange die Bedingung der Schleife zutrifft, wird über das Mailbox-Objekt der derzeit aktive Thread auf "wartend" gesetzt und der Zugriff darauf freigegeben, was den jeweils Anderen (der ja bereit ist) veranlasst, aktiv zu werden. In diesem ist die Schleifenbedingung natürlich entgegengesetzt definiert, sodass dort gleich act(); aufgerufen und der wartende Thread anschließend benachrichtigt werden kann (der dann die while-Schleife verlassen und seinerseits arbeiten kann). Mir scheint, dass so alles sauber ineinander greift.
  11. Gutes Anschreiben, kleine grammatische und orthogafische Korrekturen vielleicht noch: Rest kann so bleiben denke ich.
  12. Mit solchen Behauptungen wäre ich aber vorsichtig. Eveuntuell ändern sich auch mal die Lehrpläne und sind - wie schon gesagt - von Bundesland zu Bundesland ein wenig unterschiedlich. Der Unterrichtsstoff, den dein Ausbilder damals gelernt hat muss nicht zwangsläufig immernoch der Gleiche sein. Mag schon sein, aber wonach sollen sich die Schulen denn da richten? Der eine Teil der Schüler muss in der Firma Server verwalten, der andere Teil fährt mit zu Kunden und richtet Router ein, wieder andere vernetzen die Abteilung neu oder was weiß ich. Irgendwer wird immer da sitzen und sagen "Was wir erst im 3. Lehrjahr lernen, bräuchte ich jetzt."
  13. So, ich habs nun folgendermaßen gelöst: Beide Threads bekommen ein Objekt Mailbox mit in den Konstruktor und sperren dies für den jeweils anderen Thread, sobald sie darauf zugreifen. Da Thread B aber erst sinnvoll handeln kann, wenn Thread A durchlaufen ist, wartet dieser, falls nötig. A kann analog nicht 2x nacheinander sinnvoll handeln und wartet in diesem Fall auf einen neuen Durchlauf von B. Zur Vollständigkeit nochmal der Code: public class PostMan extends Thread { MailBox mailbox; public PostMan (MailBox mailbox) { this.mailbox = mailbox; } public void run() { for (int i = 0; i < 10; i++) { synchronized(mailbox) { System.out.println("Bote: (1) Bringe Post"); while (mailbox.hasMail()) { System.out.println("Bote: (2) Briefkasten ist voll, warte bis jemand kommt"); try { mailbox.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } act(); mailbox.notify(); } } } private void act() { System.out.println("Bote: (2) Briefkasten leer, werfe Brief ein"); mailbox.deliverMail(); } } public class Receiver extends Thread { MailBox mailbox; public Receiver (MailBox mailbox) { this.mailbox = mailbox; } public void run() { for (int i = 0; i < 10; i++) { synchronized(mailbox) { System.out.println("Empfänger: (1) Schaue nach Post"); while (mailbox.hasMail() == false) { System.out.println("Empfänger: (2) Nichts drin, dann warte ich noch."); try { mailbox.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } act(); mailbox.notify(); } } } private synchronized void act() { System.out.println("Empfänger: (2) Juhu, Post ist da"); mailbox.getMail(); } } public class MailBox { private boolean mail = false; public synchronized boolean hasMail() { return mail; } public synchronized void getMail() { System.out.println("Empfänger: (3) Post abgeholt"); mail = false; System.out.println(); } public synchronized void deliverMail() { System.out.println("Bote: (3) Post eingeworfen"); mail = true; System.out.println(); } } public class ThreadTest { public static void main (String [] args) { MailBox mailbox = new MailBox(); Thread postman = new PostMan(mailbox); Thread rec = new Receiver(mailbox); postman.start(); rec.start(); } } Programmausgabe: Danke für die Hilfe!
  14. Einheitliche Lehrpläne wären an dieser Stelle wünschenswert. Zumindest hätte es den großen Vorteil, dass in den Zwischenprüfungen nichts gefragt würde, was nicht bereits in der Schule behandelt wurde. Das ist aber kein neues Problem. Auf der anderen Seite sollte der Unterrichtsstoff in ITS (als dein "Fachgebiet") nur eine Wiederholung, maximal eine kleine Ergänzung zu dem sein, was du im Betrieb lernst (so ist es zumindest bei mir bezüglich der Anwendungsentwicklung), unabhängig davon, wann was dran kommt.
  15. Moin! Hach, was für ein Spiel gestern wieder *schwelg* Finaaale uoooh ... *sing*
  16. Mal grob überschlagen: 1. Jahr Grundlagen Elektrotechnik Logische Schaltungen Einfache IT-Systeme Hardwarekomponenten (Mainboard, Bus-Systeme, Schnittstellen, Festplatten, Grafikkarten usw) Massenspeicher CD-ROM, DVD, Flashspeicher, ... Einführung in Betriebssysteme 2. Jahr Vernetzte IT-Systeme (Chronologie in der Reihenfolge hier nicht garantiert) Einführung in Netzwerke Netzwerktopologien Supernetting OSI Subnetting Routing (statisch / dynamisch) IPv4 und IPv6 TCP/IP, UDP, SMTP ARP, NAT ISDN ggf. noch DSL und Mobilfunk
  17. Sorry für den Doppelpost. Ich habe in der Klasse MailBox die Methoden synchronisiert und der Ablauf scheint nun nachvollziehbar und plausibel zu werden. Hier nochmal eine Ausgabe, die deutlich macht, wann welcher Thread einsetzt. Mein Problem ist jetzt noch diese Gameboy-Logik - ich möchte diese Verschachtelung verhindern. Ein Thread darf erst dann loslegen, wenn der jeweils andere fertig ist, hier also, dass einer der beiden den Briefkasten erst anrührt, wenn der jeweils andere nicht mehr dran ist. Ich stell mich wieder schön blöd an, hoffentlich sieht jemand, was ich ändern muss :old Danke
  18. An dieses Fähnchen hab ich auch schon gedacht, hier mal ein neuer Ansatz mit anschließender Ausgabe: Der Postbote public class PostMan extends Thread { public void run() { for (int i = 0; i < 10; i++) { System.out.println("Bote: Bringe Post"); try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } if (MailBox.hasMail() == false) act(); else System.out.println("Da liegt noch was vom letzten Mal"); } } private synchronized void act() { System.out.println("Bote: Sie haben Post!"); MailBox.deliverMail(); } } Der Empfänger public class Receiver extends Thread { public void run() { for (int i = 0; i < 10; i++) { System.out.println("Empfänger: Schaue nach Post"); try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } if (MailBox.hasMail()) act(); else System.out.println("Empfänger: Umsonst gelaufen, nichts da."); } } private synchronized void act() { System.out.println("Empfänger: Juhu, Post ist da"); MailBox.getMail(); } } Der Briefkasten public class MailBox { private static boolean mail = true; public static boolean hasMail() { return mail; } public static void getMail() { System.out.println("Empfänger: Post abgeholt"); mail = false; System.out.println(); } public static void deliverMail() { System.out.println("Bote: Post eingeworfen"); mail = true; System.out.println(); } } Die Ausgabe So ganz richtig ist die Ausgabe noch nicht, und ich kriegs ums Verrecken nicht hin, das sauber zu koordinieren, wo ist der Haken?
  19. Kulturbanause! Und das, wo dein Heimverein um den Einzug ins Champions League Finale spielt. Tse.
  20. Es geht aber um Multithreading. Sicherlich gäbe es andere, bessere Wege, sowas zu realisieren, aber das war nicht meine Frage.
  21. Hallo, im Zuge meiner Vorbereitung auf den SCJP prügel ich mir das Multithreading rein und komme bei einem kleinen Übungsbeispiel nicht weiter. Programmlogik: Ich habe 2 Klassen, die Runnable implementieren. Die eine stellt einen Postboten dar, der 10 mal ankommt und Post abliefert. Die andere Klasse ist der Empfänger, der 10 mal zum Briefkasten rennt und die Post abholt. Das gewünschte Ergebnis ist nun wie man vermuten könnte "Postbote kommt, Empfänger kommt, Postbote kommt, Empfänger kommt, usw." Soweit hab ich es: public class PostMan implements Runnable { public void run() { for (int i = 0; i < 10; i++) { act(); } } synchronized void act() { System.out.println("Bote: Liefere Post ab"); // try{ notify(); wait(); } catch (Exception e) {} } } public class Receiver implements Runnable { public void run() { for (int i = 0; i < 10; i++) { act(); } } synchronized void act() { System.out.println("Empfänger: Hole Post ab"); // try{ notify(); wait(); } catch (Exception e) {} } } public class ThreadTest { public static void main (String [] args) { Thread postman = new Thread(new PostMan()); Thread rec = new Thread(new Receiver()); postman.start(); rec.start(); } } Wie verwende ich hier wait() und/oder notify(), um den jeweils anden Thread aus dem waiting-Pool zu holen und den aktuellen reinzusetzen? Wenn ich den jeweils auskommentierten try/catch Block einkommentiere, gibt es stets einen Deadlock. So, wie es jetzt ist, kommen Bote und Empfänger 10x zufällig vorbei - das würde ich gern steuern. Kann wer helfen?
  22. Morgen, hast du in den anderen Threads nichts dazu gefunden? Das ist eins der häufigsten Themen hier. Hier Oder hier Oder auch hier Das Handbuch von Westermann ist das Meistempfohlene und nach meinem Wissen auch das zur Prüfung zugelassene. Bei allen anderen Büchern würde ich mich konkret bei deiner IHK informieren. Im Übrigen ist das "Handbuch" von Galileo Computing eigentlich kein Handbuch, sondern mehr ein Lexikon und daher ganz gewiss nicht zugelassen

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...