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>
|
Beschreibe den Threadzustand running
Thread wird aktiv auf einem Prozessor(-kern) ausgeführt
Beschreibe den Threadzustand blocked
Thread wartet auf ein Ereignis (z.B. I/O, Zeit, Lock etc.)
Beschreibe den Threadzustand dead
Thread ist fertig abgearbeitet (run()-Methode zu Ende).
Unter Unix auch gerne als Zombie bezeichnet
Normale Methodenaufrufe sind in der Regel immer synchron oder asynchron?
synchron: Der aufrufende Kontext wird erst dann weiter ausgeführt, wenn die aufgerufenen Methode beendet ist.
Bedeutet, dass alles in einem einzigen Thread ausgeführt wird.
Entspricht dem natürlichen Verständnis: Oft erwarten wir ein Resultat (return), mit welchem wir dann weiterarbeiten wollen
Interessiert uns das Resultat einer ausgeführten Methode nicht (fire&forget) und haben wir mehrere Aufgaben, ist _________ Ausführung ineffizient!
Was sieht man auf diesem Bild?
Die main-Methode WorkerDemo(), welche sequenziell und synchron drei Methoden aufruft.
Die drei Verarbeitungszeiten der Worker summieren sich und blockieren den Aufrufer WorkerDemo. Nur ein Thread!
Was bedeutet der Begriff "asynchron" allgemein?
Ereignisse finden ohne gegenseitige zeitliche Abstimmung / Abhängigkeit statt.
Wann ist die Form Asynchron sinnvoll?
Wenn wir nach dem Start einer Aktivität nicht auf das Resultat (einer Methode) angewiesen sind (fire&forget-Prinzip)
Was für spezielle Massnahmen müssen wir für asynchrone Aufrufe treffen?
Den Aufruf in einen eigenen Thread delegieren!
Sinnvoll genutzte Asynchronität durch Parallelisierung bringt häufig Performance-_______
Java erlaubt keine nebenläufige Programmierung mit Threads.
Unabhängig vom verwendeten Betriebssystem (BS).
Je nach Fähigkeit des Betriebssystems delegiert die JVM die Threads und das Scheduling an ___________ weiter oder aber erledigt das alles selber!
das Betriebssystem
Als was dient die Klasse Thread?
Als Abstraktion für einen Thread
Die Klasse Thread hat sehr viele Methoden.
Wirklich wesentlich ist aber nur welche?
start()
Wozu dient die Methode start() in der Klasse Thread?
Damit wird die Bearbeitung des Threads gestartet
Interface Runnable definiert nur eine einzige Methode: Welche?
run()
Für welche Art von Tasks ist die Implementation von Runnable und das Starten in einem eigenen Thread sinnvoll?
Für wenige, eher seltene, eher lang laufende nebenläufige Tasks bestens geeignet.
Speziell bei "fire&forget"-Tasks, ohne Rückgabewerte
Bei der Implementation in der run()-Methode, sollte man den Thread unbedingt mit welcher Methode starten, damit die Methode nicht synchron ausgeführt wird?
start()
Was sollte man können, wenn ein Thread kein definiertes Ende hat?
Mittels Flag-Attributes jederzeit stoppen!
Wenn es um sehr viele, eher kurze und eher häufige Aufgaben geht, gibt es eine einfachere und viel effizientere Alternative als run() aus dem Interface Runnable. Welche?
Executor-Services
Was ist der Executor-Service?
Eine API auf so abstrakten Niveau, dass wir uns nicht mehr um die Erstellung und Verwaltung von (Worker-)Threads kümmern müssen, sonder "nur" noch Aufgaben zur Bearbeitung übergeben (Queue-Prinzip)
Alternativ zu Runnable können wir was benutzen?
Wann wird sie eingesetzt und was ist anders zum Runnable?
Callable: Nebenläufige Methoden mit Rückgabewert, welche wir über sogenannte Future-Objekte erhalten
Executoren erstellen was?
Einen Threadpool und eine Queue
Was ist ein Threadpool?
Eine (konfigurierbare) Anzahl Threads, welche am Leben gehalten werden, und darauf warten Callable's auszuführen.
Teure Operationen des ständigen Erzeugens und Startens von Threads werden somit vermieden. Effizienzsteigerung vor allem für viele kleine Runnable/Callable
Was ist eine Queue?
Runnable bzw. Callable werden in einer FIFO-Queue abgelegt und vom jeweils nächsten freien Thread aus dem Pool "konsumiert" (abgearbeitet). Produzent/Konsument-Modell
Welche Methoden hat Callable?
Nur die call()-Methode (analog zu Runnable mit nur run())
Was ist der Hauptvorteil eines Callable gegenüber einem Runnable?
Ein Callable kann einen Rückgabewert haben!
Typ des Rückgabewertes wird per Typparameter festgelegt
Was ist ein Future-Objekt?
Wenn wir einem Executor z.B. mit submit(...) ein Callable<V> mit einem Rückgabetyp V übergeben, erhalten wir ein Future<V>-Objekt zurück, welches später (nach Abarbeitung des Callable) den Rückgabewert enthalten wird!
Was sind Vorteile der Nebenläufigkeit
Kann nicht nur die Performance steigern, sondern auch das Programmiermodell vereinfachen!
Einfache, wenige, langlaufende nebenläufige Threads können gut mit was realisiert werden?
Mit Thread und Runnable
Sobald man mit vielen, eher kurzen und häufigen Threads rechnen muss sollte man was machen?
Unbedingt Konzept der Executor-Services nutzen, da es einfach ist, viel effizienter und auch mit Methoden mit Rückgabewerten funktioniert
Vorsicht bei Abhängigkeiten, z.B. bei Zugriff auf gemeinsame Daten(-strukturen).
Was ist hier notwendig?
Synchronisation notwendig, ansonsten drohen Inkonsistenzen und Fehler!
Durch das Subtyping erklärt sich, dass einer (Referenz-)Variable vom Typ Object tatsächlich jedes beliebige Objekt jeder beliebigen Java-Klasse zugewiesen werden kann.
Wann nutzt man diesen Umstand?
Beispielsweise, um flexible Schnittstellen oder Methoden zu implementieren, welche für beliebige (oder zumindest erweiterbare) Mengen von Typen nutzbar sind.
Ursprünglich haben viele Datenstrukturen in Java den Typ Object verwendet