JAVA & Objektorientiertes Programmieren
Eine Einführung in das objektorientierte Programmieren mit JAVA Diese Kartei baut auf dem Stoff des Moduls OOP an der HSLU geleitet von Roland Gisler auf.
Eine Einführung in das objektorientierte Programmieren mit JAVA Diese Kartei baut auf dem Stoff des Moduls OOP an der HSLU geleitet von Roland Gisler auf.
Fichier Détails
Cartes-fiches | 500 |
---|---|
Utilisateurs | 19 |
Langue | Deutsch |
Catégorie | Informatique |
Niveau | Université |
Crée / Actualisé | 04.12.2016 / 16.08.2024 |
Lien de web |
https://card2brain.ch/box/java_objektorientiertes_programmieren
|
Intégrer |
<iframe src="https://card2brain.ch/box/java_objektorientiertes_programmieren/embed" width="780" height="150" scrolling="no" frameborder="0"></iframe>
|
Java macht automatische (implizite) Casts von grösseren zu kleineren elementaren Datentypen, weil diese (meist) gefahrlos sind.
Java macht automatische (implizite) Casts von kleineren zu grösseren elementaren Datentypen, weil diese (meist) gefahrlos sind.
Wie lässt sich der Typ eines Objektes abfragen?
Mit einer Expression: (object instanceOf Klasse)
Jede Klasse in Java kennt auch die Methoden, die auf Object deklariert sind
Durch das Subtyping erklärt sich, dass (Referenz-)Variablem vom Typ Object tatsächlich ____________ Objekt irgendeiner beliebigen Java-Klasse zugewiesen werden kann.
Mit welchem Wert ist der Counter initialisiert?
0
Was macht die Methode increment() in der Klasse Counter?
Erhöht den Wert um 1
Was bedeuted "race condition"?
Befinden sich mehrere Threads gleichzeitig in einem Abschnitt, überschreiben sie sich gegenseitig den aktuellen "Counter-Stand", wenn ein Thread-Scheduling stattfindet. Durch die parallele Ausführung entsteht eine Inkonsistenz! Das exakte Verhalten des Schedulers ist nicht deterministisch vorhersagbar, und somit ist das Endresultat ein zufälliges Ergebnis einer sogenannten "race condition" (Wettlauf der Threads)
Wie kann man Inkonsistenzen durch parallele Ausführungen von Threads verhindert werden?
Indem man in den betroffenen kritischen Abschnitten sicherstellt, dass sich zu jedem Zeitpunkt nur genau ein Thread aufhalten darf. Die Threads müssen sich somit gegenseitig aus dem kritischen Abschnitt ausschliessen: Mutual exclusion (Mutex)
In welchem Zusammenhang wird der Begriff "Locking" verwendet?
In Zusammenhang mit Semaphoren. Vereinfacht: Ein Sperre, dessen Zustandsprüfung und die nachfolgende Belegung untrennbar (atomar) verknüft sind.
Vor dem Eintritt in den kritischen Abschnitt wird geprüft, ob die Sperre für diesen Abschnitt frei ist. Wenn ja: Sperre setzen, kritischen Abschnitt abarbeiten, austreten und Sperre wieder frei geben. Wenn nein: Warten bis Sperre frei ist.
Wie funktioniert der Vorgang Synchronisation?
Vor dem Eintritt in den kritischen Abschnitt wird geprüft, ob die Sperre für diesen Abschnitt frei ist. Wenn ja: Sperre setzen, kritischen Abschnitt abarbeiten, austreten und Sperre wieder frei geben. Wenn nein: Warten bis Sperre frei ist.
Java bietet vielfältige Sperrmechanismen an (Semaphore, Lock etc.), aber der Einsatz dieser Primitiven erfordert einige Erfahrung. Darum bietet Java welches abstraktere Konzept an?
Monitore
Was passiert mit einem Codeabschnitt der in einen Monitor eingefasst wird?
Welche Einsatzszenarien gibt es?
Es erfüllt das Kriterium des gegensetigen Ausschlusses (Mutex)
Einsatzszenarien:
- entweder auf eine ganze Methode, oder
- auf einen expliziten Codeblock
Was ist das Schlüsselwort für einen Monitor?
synchronized
Die ganze Methode wird als kritischer Abschnitt (critical section) definiert, pro Instanz der Klasse kann nur genau ein Thread die Funktion ausführen (die konkurrenzierende Threads müssen warten --> Queue)
Synchronisation verhindert Parallelität und kostet auch Zeit: Darum kritische Abschnitte immer ________________ definieren!
Nur der wirklich kritische Abschnitt wird synchronisiert. Effizientere Lösung, Blöcke in der Regel empfohlen.
this identifiziert hier als Referenz den "Besitzer" des Monitors.
Es wäre somit möglich über verschiedene Objekte voneinander unabhängige Monitore zu definieren (Vorsicht!)
Sind alle Klassen die nicht explizit als "thread-safe" dokumentiert sind, tatsächlich nicht threadsicher?
Ja, das gilt für alle Standard-Datenstrukturen aus java.util und z.B. auch für alle GUI-Klassen von Swing!
-> Begründung: Synchronisation kostet imer auch Zeit und ist somit langsamer.
Werden Datenstrukturen gemeinsam von mehreren Threads verwendet, müssen diese _________ implementiert sein. Ansonsten?
"thread-safe". Ansonsten drohen beliebige Inkonsistenzen und Exceptions!
Wie geht man vor wenn mein eigene Klassen implementieren, welche auch nebenläufig genutzt werden können/sollen?
Man muss diese selber thread-safe implementierieren!
Vorgehen: Analyse des Codes und Identifikation der kritischen Abschnitte. Synchronisation mit geeigneten Mitteln.
Was ist die Herausforderung, wenn man Klassen selber thread-safe implementiert?
Testen ist nur sehr eingeschränkt oder nur mit viel Aufwand möglich (es passiert meistens sehr selten etwas, aber wenn...)
Threadsicherheit: Anspruchsvolle Aufgabe, braucht Erfahrung!
Bei eigenen Implementationen von Klassen: Unbedingt dokumentieren, ob eine Klasse thread-safe implementiert ist oder nicht!
Was passiert bei zu viel Synchronisation?
Langsames Programm, und Gefahr von Deadlocks!
Was bedeutet nebenläufig?
Mehrere Vorgänge heissen nebenläufig, wenn sie voneinander (weitgehend) unabhängig und parallel bearbeitet werden können.
Was ist das Problem bei der Nebenläufigkeit von mehreren Prozessen auf einem Rechner?
Es findet ein Wettstreit um die dafür notwendigen Betriebsmittel statt
Zwei nebenläufige Prozesse sind also nur bezüglich ihrer Abarbeitung unabhängig; sie sind jedoch indirekt voneinander abhängig, wenn sie z.B. auf gleiche Ressourcen zugreifen wollen und(oder auf ein Ereignis warten müssen
Nenne ein typischen Beispiel indem ein Programm mehrere Aktionen gleichzeitig (quasi-parallel) ausführt
Dokument "im Hintergrund" ausdrucken, während man in der Textverarbeitung weiter arbeiten kann.
Ist dies eine Vereinfachung des Programmiermodelles/-semantik?
Statt innerhalb einer Methode n Datenquellen zu verarbeiten, startet man n parallele Verarbeitungen mit je einer Datenquelle
Ja, vergleiche: Verarbeitung von n Kommunikationsverbindungen
Aktuelle Technologien unterstützen hardwaremässig Parallelität, z.B. Multi-Core Prozessoren / Hyper-Threading-Technik. Hier lässt sich die Rechenleistung nur über Parallelisierung in der Ausführung ausschöpfen!
Was ist ein Prozess?
Ein Programm in der Ausführung.
Ein Programm kann somit mehrfach (in n-Prozessen) ausgeführt werden. Jeder Prozess hat dafür seinen eigenen (meist virtuellen) Speicher.
Wo werden alle Prozesse verwaltet und kontrolliert?
Alle Prozesse werden vom Betriebssystem in einer Prozessliste verwaltet und kontrolliert.
Jeder Prozess hat seinen eigenen Prozess-Kontext
Was ist Scheduling und was ein Scheduler?
Der Scheduler des Betriebssystems teilt die Rechenzeit den Prozessen und Threads nach verschiedenen Kriterien möglichst fair und effizient zu.
Abhängig von Zustand, Priorität und Art des Prozesses.
Weshalb wird ein Scheduler benötigt?
Prozesse und Threads werden, zur besseren Ausnutzung aller Ressourcen, (pseudo-)parallel ausgeführt.
In der Regel ist immer eine wesentlich grössere Menge von Threads als Prozessoren (bzw. cores) vorhanden. Threads konkurrenzieren somit alle um den Prozessor
Wie oft werden Threads neu geschedult.
im Schnitt ca. alle 10-20ms
Grössenordnung: Reaktionszeit eines Menschen!
So entsteht der Eindruck der (Pseudo-)Parallelität
Beschreibe den Threadzustand new
Thread ist mit new erzeugt, aber noch nicht gestartet
Beschreibe den Threadzustand ready
Thread ist gestartet (start()) und lauffähig und wartet auf die Zuweisung auf einen Prouesser(-kern).