Java Schulung (Java 2 Java Development Kit 5 / 6)

Größe: px
Ab Seite anzeigen:

Download "Java Schulung (Java 2 Java Development Kit 5 / 6)"

Transkript

1 4. Threads und nebenläufige Programmierung 4.1 Prozesse und Threads Moderne Betriebssysteme geben Benutzer die Illusion, verschiedene Programm würden gleichzeitig ausgeführt (Multitasking) Tatsächlich jedoch Quasiparallelität durch Scheduler (verzahnte Verarbeitung von Prozessen) Bei Mehrprozessormaschinen tatsächlich parallele Abarbeitung Bei modernen Betriebssystemen gehört zu jedem Prozess mindestens ein Thread (Ausführungsstrang), der Programmcode ausführt In Java auch multithreaded Software möglich, wenn OS keine Threads direkt verwendet (in diesem Fall simuliert JVM die Parallelität) Wie parallele Programme die Geschwindigkeit steigern können Zunächst nicht ersichtlich, wie 1-Prozessor-System durch nebenläufige Abarbeitung beschleunigt werden kann Betrachtet man ein Programm, das eine Folge von Anweisungen ausführt (z.b. Visualisieren eines Datenbank-Reports) Die Schritte sind dann z.b. 1. Baue ein Fenster auf. 2. Öffne die Datenbank vom Netz-Server, und lies die Datensätze. 3. Analysiere die Daten, und visualisiere den Fortschritt. 4. Öffne die Datei, und schreibe den erstellten Report. Auf dem ersten Blick typisches sequenzielles Programm; kann aber durch geschickte Parallelisierung beschleunigt werden Überlegung, welche Schritte gleichzeitig ausgeführt werden können: o Das Öffnen von Fenster, Ausgabedatei und Datenbank kann parallel geschehen. o Das Lesen neuer Datensätze und das Analysieren alter Daten kann gleichzeitig erfolgen. o Alte analysierte Werte können während der neuen Analyse in die Datei geschrieben werden. Parallelisierbare Ressourcen Wenn Operationen tatsächlich parallel durchgeführt, enormer Leistungszuwachs zu verzeichnen (bei 1-Prozessor-Systemen) Bei den gleichzeitig auszuführenden Aufgaben handelt es sich um unterschiedliche Ressourcen Wenn die grafische Oberfläche das Fenster aufbaut, braucht sie dazu Rechenzeit, parallel kann Datei geöffnet werden, wobei weniger Prozessorleistung gefragt ist, da die vergleichsweise träge Festplatte angesprochen wird Öffnen der Datenbank wird auf den Datenbank-Server im Netzwerk abgewälzt (Geschwindigkeit hängt von der Belastung des Servers und des Netzes ab) Wenn anschließend Daten gelesen werden, muss Verbindung zum Datenbank-Server natürlich stehen. Daher sollte man zuerst die Verbindung aufbauen Marcel Wieczorek S e i t e

2 In diesem Beispiel ist durch hohe Parallelisierung Leistungssteigerung möglich, da die bei langsamen Operationen anfallenden Wartezeiten genutzt werden können Ressource Belastung Hauptspeicherzugriffe Dateioperationen Prozessor Festplatte Datenbankzugriff Nebenläufigkeit muss gut geplant werden Server, Netzwerkverbindung Nur wenn verzahnte Aktivitäten unterschiedliche Ressourcen verwenden, resultiert daraus auf Einprozessorsystemen ein Geschwindigkeitsvorteil 4.2 Threads erzeugen Threads über die Schnittstelle Runnable implementieren Damit Thread weiß, was er ausführen soll, muss man ihm Anweisungsfolgen geben (diese werden in einem Befehlsobjekt vom Typ Runnable verpackt und dem Thread übergeben) Wird der Thread gestartet, arbeitet er die Programmzeilen aus dem Befehlsobjekt parallel zum restlichen Programmcode ab Die Schnittstelle Runnable ist schmal und schreibt nur eine run()-methode vor Beispiel: zwei Threads, wobei einer zwanzigmal das aktuelle Datum und die Uhrzeit ausgibt und der andere einfach eine Zahl Beispiel: CounterCommand.java package de.assona.threads.first; /** mwieczorek */ class CounterCommand implements Runnable { for (int i = 0; i < 20; i++) System.out.println(i); Threads über Runnable starten Um Thread nun als solchen zu starten, reicht es nicht aus, run()-methode aufzurufen Würden man dies tun, wäre nichts nebenläufig, sondern man würde einfach eine Methode sequenziell ausführen Damit Programmcode parallel zur Applikation läuft, muss man Thread-Objekt mit dem Runnable verbinden und dann den Thread explizit starten Dazu wird Konstruktor der Klasse Thread Referenz auf das Runnable-Objekt übergeben und start() aufgerufen Nachdem start() für den Thread eine Ablaufumgebung geschaffen hat, ruft es intern selbstständig die Methode run() genau einmal auf Läuft der Thread schon, löst zweiter Aufruf der start()-methode IllegalThreadStateException aus Marcel Wieczorek S e i t e

3 Beispiel: FirstThread.java public static void main(string[] args) { Thread t1 = new Thread(new DateCommand()); t1.start(); Thread t2 = new Thread(new CounterCommand()); t2.start(); Beispiel-Ausgabe: Tue Jun 1010:53:47 CEST Tue Jun 1010:53:47 CEST Verzahnung beider Threads deutlich zu erkennen Kommt durch unterschiedliche Laufzeiten zustande, die für Datums- und Zeitausgabe notwendig sind Die Klasse Thread erweitern Klasse Thread implementiert selbst das Interface Runnable und implementiert die run()- Methode mit leerem Programmcode Will man eigene parallele Aktivitäten programmieren, kann man auch die Klasse Thread erweitern Beispiel: DateThread.java public class DateThread extends Thread { for (int i = 0; i < 20; i++) System.out.println(new java.util.date()); Aufruf DateThread dt = new DateThread(); dt.start(); // new DateThread().start(); Konstruktor muss kein Runnable-Exemplar mehr übergeben werden (es genügt der Aufruf der Methode start()) Marcel Wieczorek S e i t e

4 Erweitern von Thread oder Implementieren von Runnable? Vorteil Nachteil Ableiten von Thread (extends Thread) Programmcode in run() kann die Methoden der Klasse Thread nutzen. Da es in Java keine Mehrfachvererbung gibt, kann die Klasse nur von Thread erben. Implementieren von Runnable (implements Runnable) Klasse kann von anderer problemspezifischer Klasse erben. Kann sich nur mit Umwegen selbst starten (Threadmethoden nur über Umwege nutzbar) Beste Idee wäre, Runnable-Objekte zu bauen, die dann dem Thread übergeben werden Befehlsobjekte dieser Art sind recht flexibel, da die einfachen Runnable-Objekte leicht übergeben und sogar von Threads aus einem Thread-Pool ausgeführt werden können 4.3 Die Zustände eines Threads Bei Thread-Exemplar gibt es verschiedene Zustände festzustellen Zustand Nicht erzeugt Laufend Wartend Beendet Erläuterung Lebenslauf eines Thread-Objekts beginnt mit new, doch befindet er sich damit noch nicht im Zustand ausführend Durch start() gelangt Thread in den Zustand»ausführbar«beziehungsweise»laufend«; Zustand kann sich ändern, wenn anderer Thread zur Ausführung gelangt und dann dem aktuellen Thread den Prozessor entzieht (vormals laufender Thread kommt in den Zustand nicht laufend, bis der Scheduler ihm wieder Rechenzeit zuordnet) Zustand wird mittels spezieller Synchronisationstechniken oder Ein- /Ausgabefunktionen erreicht Thread verweilt in einem Wartezustand Nachdem die Aktivität des Thread-Objekts beendet wurde, kann es nicht mehr aktiviert werden und ist tot, also beendet Zustand über Thread.State Zustand des Threads zeigt die Methode getstate() (liefert Objekt vom Typ der Aufzählung Thread.State) NEW RUNNABLE BLOCKED WAITING Neuer Thread, noch nicht gestartet Läuft in der JVM Wartet auf einen MonitorLock, wenn er etwa einen synchronized Block betreten möchte Wartet etwa auf ein notify() TIMED_WAITING Wartet etwa in einem sleep() TERMINATED Ausführung beendet Marcel Wieczorek S e i t e

5 Das Ende eines Threads Es gibt Threads, die dauernd laufen, weil sie zum Beispiel Server-Funktionen implementieren Andere führen einmalig eine Operation aus und sind danach beendet Allgemein ist ein Thread beendet, wenn eine der folgenden Bedingungen zutrifft o Die run()-methode wurde ohne Fehler beendet (Endlosschleife würde potenziell nie endenden Thread bilden) o In der run()-methode tritt eine RuntimeException auf, die die Methode beendet (beendet weder die anderen Threads noch die JVM als Ganzes) o Der Thread wurde von außen abgebrochen (dazu dient problematische Methode stop(), von deren Verwendung abgeraten wird und die auch veraltet ist) o Die virtuelle Maschine wird beendet und nimmt alle Threads mit ins Grab Einen Thread mit interrupt() beenden Enthält run()-methode Endlosschleife (z.b. Serveranwendung), muss Thread von außen zur Kapitulation gezwungen werden Man bittet ihn, seine Arbeit aufzugeben (Thread lauscht periodisch, ob jemand von Außen Abbruchwunsch geäußert hat) Die Methoden interrupt() und isinterrupted() Methode interrupt() setzt von außen in einem Thread-Objekt ein internes Flag, das dann in der run()-methode durch isinterrupted() periodisch abgefragt werden kann Folgendes Programm soll jede halbe Sekunde eine Meldung auf dem Bildschirm ausgeben Nach zwei Sekunden wird der Unterbrechungswunsch mit interrupt() gemeldet Auf dieses Signal achtet die sonst unendlich laufende Schleife und bricht ab Beispiel: ThreadusInterruptus.java public static void main(string[] args) throws InterruptedException { ThreadusInterruptus ti = new ThreadusInterruptus(); ti.start(); Thread.sleep(2000); ti.interrupt(); System.out.println("Es gibt ein Leben vor dem Tod. "); while (!isinterrupted()) { System.out.println("Und er läuft und er läuft und er läuft"); try { Thread.sleep(500); catch (InterruptedException e) { interrupt(); System.out.println("Unterbrechung in sleep()"); System.out.println("Das Ende"); Marcel Wieczorek S e i t e

6 run()-methode im Thread so implementiert, dass Schleife genau dann verlassen wird, wenn isinterrupted() den Wert true ergibt, also von außen die interrupt()-methode für dieses Thread-Exemplar aufgerufen wurde Genau dies geschieht in der main()-methode Stünde interrupt() im catch-block nicht, würde vermutlich nicht funktionieren Wenn Ausgabe nur jede halbe Sekunde stattfindet, befindet sich der Thread fast die gesamte Zeit über in der Schlafmethode sleep() Also wird vermutlich der interrupt() den Thread gerade beim Schlafen stören Dann wird sleep() durch InterruptedException unterbrochen, und der catch-behandler fängt die Ausnahme ein Durch Unterbrechung wird das interne Flag zurückgesetzt, sodass isinterrupted() meint, die Unterbrechung habe gar nicht stattgefunden interrupt() muss erneut aufgerufen werden, da das Abbruch-Flag neu gesetzt werden muss und isinterrupted() das Ende bestimmen kann neben sleep() löschen auch die Methoden join() und wait() durch die InterruptedException das Flag Der stop() von außen Wenn Thread nicht auf interrupt() hört, aber aus irgendwelchen Gründen dringend beendet werden muss, können wir die veraltete Methode stop() einsetzen Bietet keine Möglichkeit, dass Thread Zustand konsistent verlässt Thread kann nur noch sein Testament in Form eines ThreadDeath-Objekts anzeigen Das ThreadDeath-Objekt Immer Wenn Thread durch stop() zum Ende kommen soll, löst JVM ThreadDeath-Ausnahme aus, die Thread letztendlich beendet ThreadDeath ist Unterklasse von Error, das wiederum von Throwable abgeleitet ist, sodass ThreadDeath mit einem try-catch-block abgefangen werden kann Wenn man ThreadDeath auffängt, kann man noch auf den Tod reagieren und Aufräumarbeiten erlauben Man sollte aber nicht vergessen, anschließend das aufgefangene ThreadDeath-Objekt wieder auszulösen, weil der Thread sonst nicht beendet wird Beispiel: ThreadStopRevovery.java public static void main(string[] args) throws InterruptedException { ThreadStopRecovery tsr = new ThreadStopRecovery(); tsr.start(); Thread.sleep(1); tsr.stop(); try { while (true) System.out.println("I Like To Move It."); catch (ThreadDeath td) { System.out.println("Das Leben ist nicht tot zu kriegen."); throw td; Marcel Wieczorek S e i t e

7 Auf das Ende Warten mit join() Will man Aufgaben auf mehrere Threads verteilen, kommt der Zeitpunkt, an dem Ergebnisse eingesammelt werden Resultate können allerdings erst zusammengebracht werden, wenn alle Threads mit Ausführung fertig sind Zum Warten gibt es mehrere Strategien o Zunächst lässt sich mit Callable arbeiten, um dann mit get() synchron auf das Ende zu warten o Arbeitet man mit Runnable, kann ein Thread keine direkten Ergebnisse wie eine Funktion nach außen geben, weil die run()-methode den Ergebnistyp void hat o Da nebenläufiger Thread zudem asynchron arbeitet, weiß auch nicht, wann das Ergebnis zu erwarten ist Übertragung von Werten ist kein Problem Hier können Klassenvariablen und auch Objektvariablen helfen, denn über sie kann man kommunizieren Was fehlt, ist die Möglichkeit, auf das Ende der Aktivität eines Thread warten zu können Das funktioniert mit der Methode join() In folgendem Beispiel legt Thread t Ergebnis in Variable result ab Beispiel: JoinTheThread.java public static void main(string[] args) throws InterruptedException { JoinerThread t = new JoinerThread(); t.start(); t.join(); System.out.println(t.result); Beispiel: JoinerThread.java public class JoinerThread extends Thread { public int result; result = 1; Ohne Zeile t.join() wird mit der Ausgabe nicht gewartet, bis JoinerThread fertig ist und daher hat die Variable result noch den Wert 0 Threads schlafen Manchmal notwendig, Thread bestimmt Zeit lang anzuhalten; dazu lassen sich zwei Methoden nutzen Klassenmethode: Thread.sleep() Objektmethode: sleep() auf einem TimeUnit-Objekt Beide beziehen sich auf den ausführenden Thread; bei TimeUnit Zeiteinheiten besser sichtbar Marcel Wieczorek S e i t e

8 Beispiel: SleepThread.java package de.assona.threads.sleep; import java.util.concurrent.timeunit; /** mwieczorek */ public class SleepThread extends Thread { public int result; try { //Thread.sleep(2000); TimeUnit.SECONDS.sleep(2); System.out.println("Zeit ist um."); catch (InterruptedException e) { e.printstacktrace(); /** args InterruptedException */ public static void main(string[] args) throws InterruptedException { SleepThread st = new SleepThread(); st.start(); Beispiel: Eine Zeituhr 4.4 Arbeit niederlegen und wieder aufnehmen final void suspend() Hat man die Möglichkeit, auf den Thread zuzugreifen (checkaccess() regelt dies wieder), und der Thread lebt, wird er so lange eingefroren (schlafen gelegt), bis resume() aufgerufen wird final void resume() Weckt einen durch suspend() lahm gelegten Thread wieder auf, der dann wieder arbeiten kann beide Methode veraltet und ähnlich problematisch wie stop() 4.5 Priorität Jeder Thread verfügt über eine Priorität, die aussagt, wie viel Rechenzeit ein Thread relativ zu anderen Threads erhält Priorität ist eine Zahl zwischen Thread.MIN_PRIORITY (1) und Thread.MAX_PRIORITY (10) Durch den Wert kann der Scheduler erkennen, welchem Thread er den Vorzug geben soll, wenn mehrere Threads auf Rechenzeit warten Bei Initialisierung bekommt jeder Thread die Priorität des erzeugenden Threads. Normalerweise ist es die Priorität Thread.NORM_PRIORITY (5) Das Betriebssystem (oder die JVM) nimmt die Threads immer entsprechend der Priorität aus der Warteschlange heraus (daher Prioritätswarteschlange) Die Priorität kann durch Aufruf von setpriority() geändert und mit getpriority() abgefragt werden Marcel Wieczorek S e i t e

9 4.6 Dämonen Thread würde bei Endlosschleife weiterlaufen, auch wenn Hauptapplikation beendet ist (nicht immer beabsichtigt) Dazu erhält Thread spezielle Kennung (wird als Dämon gekennzeichnet) Wenn Hauptprogramm beendet ist und Laufzeitumgebung erkennt, dass kein normaler Thread sondern nur noch ein Daemon läuft, wird dieser beendet Beispiel: DaemonThread.java package de.assona.threads.daemon; /** mwieczorek */ public class DaemonThread extends Thread { public DaemonThread() { setdaemon(true); while (true) System.out.println("Lauf, Thread, lauf"); public static void main(string[] args) { new DaemonThread().start(); Ohne setdaemon(true) würde Thread ewig weiterlaufen 4.7 Kooperative Threads Neben sleep() gibt es weitere Methode, um kooperative Threads zu programmieren: die Methode yield() funktioniert etwas anders als sleep(), da hier nicht nach Ablauf der genannten Millisekunden zum Thread zurückgekehrt wird, sondern yield() den Thread bezüglich seiner Priorität wieder in die Thread-Warteschlange des Systems einordnet Einfach ausgedrückt, sagt yield() der Thread-Verwaltung:»Ich setzte diese Runde aus und mache weiter, wenn ich das nächste Mal dran bin.«4.8 Synchronisation und kritische Abschnitte Eigenständiges Leben der Thread oftmals problematisch für die anderen Gemeinsam genutzte Daten Über statische Variablen oder auch gemeinsam genutzte Datenstruktur können Threads Daten austauschen Marcel Wieczorek S e i t e

10 Probleme beim gemeinsamen Zugriff und kritische Abschnitte Da Threads eigene Daten Verwalten (lokale Variablen, Stack), kommen sie sich nicht in die Quere Auch wenn Threads gmeinsame Daten nur lesen, gibt es kein Problem Gemeinsamer Schreibzugriff ist problematisch Ursprung der Probleme bei Arbeitsweise der Threads (Scheduler unterbricht zu unbekanntem Zeitpunkt Abarbeitung des Threads) Kritische Abschnitte: zusammenhängende Programmblöcke, die nicht unterbrochen werden dürfen und besonders geschützt werden müssen Nicht kritische Abschnitte: z.b. Methoden, die keine Objekteigenschaften verändern Abschnitte mit synchronized schützen Blöcke oder Methoden werden mit Modifier synchronized markiert Betretender Thread setzt bei Objekt-Methoden den Monitor des this-objekts und bei statischen Methoden den Lock des dazugehörigen Class-Objekts Versucht Thread A synchronisierte Methode aufzurufen, die ein anderer Thread B vorher betreten hat, muss der nachfolgende Thread B so lange warten, bis die Methode wieder frei ist (wenn erster Thread Methode verlässt) Beim Verlassen der Methode (oder einer Ausnahme), gibt JVM automatisch den Lock frei Dauer des Locks also an Länge des Methodenaufrufs gekoppelt (kann Parallelität einschränken) Monitore Betritt Programm eine synchronisierte Methode, bekommt es den Monitor des aufrufenden Objekts Wenn diese Methode eine andere aufruft, die am gleichen Objekt synchronisiert ist, kann sie sofort eintreten und muss nicht warten Diese Eigenschaft heißt reentrant (Ohne diese Möglichkeit würde Rekursion nicht funktionieren) Statisch synchronisierte Blöcke private static final Object o = new Object(); static void staticfoo() { synchronized (o) { //... Vor- und Nachteile von synchronisierten Blöcken und Methoden Vorteile Nachteile Schutz des kritischen Bereiches vor Schwer zu debuggen bei threadlastigen Eingriffen durch anderen Thread Programmen Allgemein langsamer als nicht synchronisierte Blöcke / Methoden Gefahr von DeadLocks Marcel Wieczorek S e i t e

11 Deadlocks Deadlock kommt vor, wenn Thread A eine Ressource belegt, die Thread B haben möchte Thread B belegt aber eine Ressource, die Thread A haben möchte Somit können beide nicht vor und nicht zurück (dauernder Wartezustand) Beispiel: Deadlocks package de.assona.threads.deadlocks; import java.util.concurrent.timeunit; import java.util.concurrent.locks.*; /** mwieczorek */ public class DeadLock { private static Lock lock1 = new ReentrantLock(), lock2 = new ReentrantLock(); private static class T1 extends Thread { lock1.lock(); System.out.println("T1: Lock auf lock1 bekommen"); try { TimeUnit.SECONDS.sleep(1); catch (InterruptedException e) { lock2.lock(); System.out.println("T1: Lock auf lock2 bekommen"); lock2.unlock(); lock1.unlock(); private static class T2 extends Thread { lock2.lock(); System.out.println("T2: Lock auf lock2 bekommen"); lock1.lock(); System.out.println("T2: Lock auf lock1 bekommen"); lock1.unlock(); lock2.unlock(); public static void main(string[] args) { new T1().start(); new T2().start(); Marcel Wieczorek S e i t e

12 4.9 Synchronisation über Warten und Benachrichtigen Mit einem Lock-Objekt wie ReentrantLock können zwecks Benachrichtigung Condition- Objekte abgeleitet werden. Dazu dient die Funktion newcondition() Warten mit await() und Aufwecken mit signal() Damit das Warten und Benachrichtigen funktioniert, kommunizieren die Parteien über ein gemeinsames Condition-Objekt, das vom Lock erfragt wird Condition condition = lock.newcondition(); void await() throws InterruptedException Wartet auf ein Signal, oder die Methode wird unterbrochen void signal() Weckt einen wartenden Thread auf Vor der Condition kommt ein Lock Lock-Objekt dient nicht nur dazu, Condition zu liefern Methoden await() und signal() können nur dann aufgerufen werden, wenn vorher ein lock() den Signal-Block exklusiv sperrt Ohne lock() kommt es zur Laufzeit zu einer java.lang.illegalmonitorstateexception Normalerweise könnte nach await() kein anderer Thread über einen durch das gleiche Lock- Objekt gesperrte Abschnitt signal() aufrufen Lösung besteht darin, dass await() den Monitor freigibt, den der Thread hält und den Thread so lange sperrt, bis z.b. von einem anderen Thread das signal() kommt Mehrere Wartende und signalall() Es kann durchaus vorkommen, dass mehrere Threads in einer Warteposition an demselben Objekt sind und aufgeweckt werden wollen signal() wählt dann aus der Liste der Wartenden einen Thread aus und gibt ihm das Signal Sollten alle Wartenden einen Hinweis bekommen, lässt sich signalall() verwenden Beispiel: Erzeuger-Verbraucher-Programm Day_6 Package: de.assona.threads.example 4.10 Gruppen von Threads in einer Thread-Gruppe Wird Thread erzeugt, gehört dieser automatisch zu einer Gruppe, die durch ein ThreadGroup-Objekt repräsentiert wird (Verwaltung ist Aufgabe der Laufzeitumgebung) Gruppenzugehörigkeit bekommt jeder Thread bei seiner Erzeugung zugeteilt (man kann sie beeinflussen) Entweder wird Gruppe beim Erzeugen mit angegeben oder erzeugter Thread kommt in die gleiche Gruppe wie der erzeugende Thread-Gruppen baumartig strukturiert (Wurzel ist die Gruppe main) Thread-Verwaltung wird erleichtert (alle Threads einer Gruppe können gestoppt werden oder Priorität kann verändert werden) Etwas über die aktuelle Thread-Gruppe herausfinden Day_6: de.assona.threads.showthreadsinmain.java Marcel Wieczorek S e i t e

13 Threads in einer Thread-Gruppe anlegen ThreadGroup tg = new ThreadGroup("sync"); Thread t1 = new Thread(tg, "threadname"); 4.11 Die Klassen Timer und TimerTask Scheduler arbeitet Programmstücke nach einer festen Zeitspanne oder zu einem fixen Zeitpunkt einmal oder wiederholt ab TimerTask ist eine Klasse, die Runnable implementiert (in run()-methode dann zeitgesteuerte Ausführung) Übung In dieser Übung sollen die Bremer Stadtmusikanten als Multithreading-Java-Programm implementiert werden. Es wird davon ausgegangen, dass die einzelnen Tiere über eine Art Megaphon ein für sie typisches Geräusch erzeugen können (d.h. die Tiere können nur mit Hilfe des Megaphons ein genug lautes Geräusch erzeugen). Zudem steht nur ein einziges solches Megaphon für alle Tiere zur Verfügung. 1. Jedes Tier soll nach jedem zehnten Mal Laut geben für 1 Sekunde schlafen gehen, ohne das Megaphon aus der Hand zu geben. 2. Jedes Tier soll nach jedem fünften Mal in einen Wartezustand gehen. Zuvor wird das Megaphon freigegeben und alle Tiere, welche sich ebenfalls in diesem Wartezustand befinden, werden aus dem Wartezustand geweckt und über das Freiwerden des Megaphons benachrichtigt. 3. Jedes Tier soll nach jedem tausendsten Mal vor lauter Laut geben in einen apathischen Zustand versinken, ohne das Megaphon herzugeben (suspend). Marcel Wieczorek S e i t e

5. Threads, Serverprozesse und Benachrichtigungen

5. Threads, Serverprozesse und Benachrichtigungen 5. Threads, Serverprozesse und Benachrichtigungen Threads allgemein Threads in Android: Handler und Messages Services: Local, Remote, Binding Benachrichtigungen Entwicklung mobiler Anwendungen Europäische

Mehr

2.2 Prozesse in Java

2.2 Prozesse in Java 2.2 Prozesse in Java! Java sieht kein Schlüsselwort für Prozesse vor, sondern bestimmte Klassen und Schnittstellen. Mit anderen Worten: der Prozessbegriff wird mit Mitteln der Objektorientierung eingeführt.

Mehr

Ausgewählte Implementierungsprobleme

Ausgewählte Implementierungsprobleme Ausgewählte Implementierungsprobleme Rebecca Tiarks 18. Dezember 2008 1 / 30 Inhaltsverzeichnis 1 2 3 Persistenzproblem & CSV Binärformat 2 / 30 Themenübersicht 1 18. Dez: + 2 8. Jan. Swing 3 15. Jan TCP,

Mehr

Prozesse. Prozesse sind Programme. Prozesse können aus Unterprozessen bestehen. Prozesshierarchie Unterprozesse Threads

Prozesse. Prozesse sind Programme. Prozesse können aus Unterprozessen bestehen. Prozesshierarchie Unterprozesse Threads Threads Prozesse, Parallelität, Nebenläufigkeit, Threads, Erzeugung, Ausführung, Kommunikation, Interferenz, Kritischer Bereich, Deadlock, Synchronisation. Prozesse Prozesse sind Programme mehrere Prozesse

Mehr

Parallele Prozesse. Prozeß wartet

Parallele Prozesse. Prozeß wartet Parallele Prozesse B-66 Prozeß: Ausführung eines Programmes in seinem Adressraum (zugeordneter Speicher) Parallele Prozesse: gleichzeitig auf mehreren Prozessoren laufende Prozesse p1 p2 verzahnte Prozesse:

Mehr

Einführung in die Programmierung Blockkurs Java

Einführung in die Programmierung Blockkurs Java Michael Bader 8. 12. April 2002 Freitag Inhaltsübersicht Exceptions und Errors Ausnahmebehandlung: try/catch/finally Threads Zugriffskontrolle bei gemeinsamen Variablen: synchronized, wait(), notify()

Mehr

Übung zu Grundlagen der Betriebssysteme. 10. Übung 18.12.2012

Übung zu Grundlagen der Betriebssysteme. 10. Übung 18.12.2012 Übung zu Grundlagen der Betriebssysteme 10. Übung 18.12.2012 Aufgabe 1 a) Was versteht man unter einem kritischen Abschnitt oder kritischen Gebiet (critical area)? b) Welche Aufgabe hat ein Semaphor? c)

Mehr

Thread-Konzept in objektorientierten Programmiersprachen. Threads. Threads in Java

Thread-Konzept in objektorientierten Programmiersprachen. Threads. Threads in Java Thread-Konzept in objektorientierten Programmiersprachen 1 Threads ein Thread ist ein eigenständiges Programmfragment, das parallel zu anderen Teilen eines Programmes ablaufen kann alle Threads eines Programmes

Mehr

Zur Erinnerung: Threads. Threadverwaltung. Threads: Prioritäten. Beispiel Flugbuchungsprogramm. Nichtdeterminismus

Zur Erinnerung: Threads. Threadverwaltung. Threads: Prioritäten. Beispiel Flugbuchungsprogramm. Nichtdeterminismus Zur Erinnerung: Threads Programmierung (fortgeschrittene Konzepte) Threads, Monitore, Semaphore und speisende en Wolf-Ulrich Raffel ([email protected]) Möglichkeiten, Threads zu definieren Bildung einer

Mehr

Variablen manipulieren per JDI

Variablen manipulieren per JDI Variablen manipulieren per JDI Zusammenfassung Jede moderne Java IDE verfügt über eine mächtige und dennoch meist einfach zu bedienende Benutzeroberfläche die das finden von Fehlern in lokalen oder entfernt

Mehr

12. Threads in Java. Sequentielle Abarbeitung (2) Beispiel: Thread (1) Sequentielle Abarbeitung (1)

12. Threads in Java. Sequentielle Abarbeitung (2) Beispiel: Thread (1) Sequentielle Abarbeitung (1) 12. Threads in Java Einführendes Beispiel 12. Threads in Java 12. Threads in Java Einführendes Beispiel Sequentielle Abarbeitung (2) Ein Thread ist eine Folge von Anweisungen, die unabhängig von anderen

Mehr

Synchronisation in Java. Invisible Web

Synchronisation in Java. Invisible Web Synchronisation in Java Studienprojekt Invisible Web Tang Zhihong Synchronisation in Java Synchronisationsproblem Monitore Wait und notify PipedInputStream und PipedOutputStream Synchronisation von Collections

Mehr

Klausurvorbereitung VS1 (Prof. Brecht) (B0rg Edition)

Klausurvorbereitung VS1 (Prof. Brecht) (B0rg Edition) Ein Prozess kann unmittelbar vom Zustand 1. Running in den Zustand Ready 2. Running in den Zustand Blocked 3. Ready in den Zustand Running Klausurvorbereitung VS1 (Prof. Brecht) (B0rg Edition) Der Adressraum

Mehr

Thread-Synchronisation in in Java. Threads Wechselseitiger Ausschluss Bedingte Synchronisation Beispiel: Warteschlangen

Thread-Synchronisation in in Java. Threads Wechselseitiger Ausschluss Bedingte Synchronisation Beispiel: Warteschlangen Thread-Synchronisation in in Java Threads Wechselseitiger Ausschluss Bedingte Synchronisation Beispiel: Warteschlangen Die Klasse Thread Die Die Klasse Thread gehört zur zur Standardbibliothek von von

Mehr

Java-Programmierung. Remote Method Invocation - RMI

Java-Programmierung. Remote Method Invocation - RMI Java-Programmierung Remote Method Invocation - RMI Entwicklungsmethoden Sockets Entwurf verteilter Anwendungen ist relativ aufwändig, da zunächst ein Kommunikationsprotokoll entwickelt werden muss aufwändig

Mehr

Beispiel für überladene Methode

Beispiel für überladene Methode Beispiel für überladene Methode class Gras extends Futter {... abstract class Tier { public abstract void friss (Futter x); class Rind extends Tier { public void friss (Gras x) {... public void friss (Futter

Mehr

Beispiel: Methode mit einem Fehler. Diese Methode wird problematisch, wenn von außen eine Dauer von 0 Sekunden angegeben wird, etwa im Aufruf

Beispiel: Methode mit einem Fehler. Diese Methode wird problematisch, wenn von außen eine Dauer von 0 Sekunden angegeben wird, etwa im Aufruf 16 Exceptions Zur Behandlung unerwarteter Situationen bietet Java Unterstützung in Form von Exceptions oder Ausnahmen. Den Sinn von Exceptions können wir Ihnen an einem kleinen Beispiel klarmachen. Nehmen

Mehr

Informatik B - Objektorientierte Programmierung in Java. Vorlesung 21: Threads 2. Inhalt

Informatik B - Objektorientierte Programmierung in Java. Vorlesung 21: Threads 2. Inhalt Universität Osnabrück 1 wait und notify 3 - Objektorientierte Programmierung in Java Vorlesung 21: Threads 2 SS 2006 Prof. Dr. F.M. Thiesing, FH Osnabrück Neben dem Monitorkonzept stehen mit den Methoden

Mehr

Parallele Programmierung in Java

Parallele Programmierung in Java PPJ-1 Parallele Programmierung in Java Prof. Dr. Uwe Kastens Sommersemester 2000 Vorlesung Parallele Programmierung in Java SS 2000 / Folie 01 PPJ-2 Ziele und Durchführung Die Studierenden sollen grundlegende

Mehr

IT in der Arztpraxis Technisches Handbuch zum Kodierassistenten

IT in der Arztpraxis Technisches Handbuch zum Kodierassistenten Technisches Handbuch zum Kodierassistenten [KBV_ITA_AHEX_Handbuch_Kodierassistent] Dezernat 6 Informationstechnik, Telematik und Telemedizin 10623 Berlin, Herbert-Lewin-Platz 2 Kassenärztliche Bundesvereinigung

Mehr

Mobile und Verteilte Datenbanken

Mobile und Verteilte Datenbanken Mobile und Verteilte Datenbanken Java RMI Vorlesung Wintersemester 2010/2011 [email protected] Institut für Informationssysteme Universität zu Lübeck Java Remote Method Invocation (RMI) Realisierung

Mehr

Verteilte Systeme CS5001

Verteilte Systeme CS5001 Verteilte Systeme CS5001 Th. Letschert TH Mittelhessen Gießen University of Applied Sciences Client-Server-Anwendungen: Vom passiven (shared state) Monitor zum aktiven Monitor Monitor (Hoare, Brinch-Hansen,

Mehr

3 Objektorientierte Konzepte in Java

3 Objektorientierte Konzepte in Java 3 Objektorientierte Konzepte in Java Bisherige Beobachtungen zu Objekten: werden in Klassen zusammengefasst besitzen Eigenschaften und Verhalten verbergen private Informationen werden geboren, leben und

Mehr

Parallele und verteilte Anwendungen in Java

Parallele und verteilte Anwendungen in Java Parallele und verteilte Anwendungen in Java Bearbeitet von Rainer Oechsle 3., erweiterte Auflage 2011. Buch. 416 S. Hardcover ISBN 978 3 446 42459 3 Format (B x L): 20,3 x 24,5 cm Gewicht: 1068 g Weitere

Mehr

Mobile und Verteilte Datenbanken

Mobile und Verteilte Datenbanken Mobile und Verteilte Datenbanken Java RMI Vorlesung Wintersemester 2013/2014 [email protected] Institut für Informationssysteme Universität zu Lübeck Kommunikations-Middleware Bietet höhere Kommunikations-Dienste

Mehr

Threads In dieser Übung beschäftigen wir uns mit der Realisierung von Threads in Java.

Threads In dieser Übung beschäftigen wir uns mit der Realisierung von Threads in Java. Threads In dieser Übung beschäftigen wir uns mit der Realisierung von Threads in Java. Aufgabe 1: Erzeugen und Starten von Threads a) Sei BankKunde eine von einer Klasse Kunde abgeleitete Klasse. Erweitern

Mehr

Nebenläufige Programmierung I

Nebenläufige Programmierung I Nebenläufige Programmierung I Martin Wirsing in Zusammenarbeit mit Moritz Hammer und Axel Rauschmayer SS06 2 Ziele Grundlegende Begriffe der nebenläufigen Programmierung verstehen lernen Nebenläufige Programme

Mehr

Schritt 1 - Ein Spielfeld

Schritt 1 - Ein Spielfeld Schritt 1 - Ein Spielfeld Wir beginnen mit zwei einfachen Java-Klassen, dem eigentlichen Spielfeld und dem Applet zum Anzeigen des Spielfeldes (und später der Buttons und der anderen Bedienelemente). Hier

Mehr

LeJOS: Mindstorms in Java programmieren

LeJOS: Mindstorms in Java programmieren LeJOS: Mindstorms in Java programmieren Alexander Koller Softwareprojekt "Sprechende Roboter" 30. April 2004 Überblick Warum Java? Was ist LeJOS? Motoren steuern Auf Sensoreingaben reagieren Wie geht's

Mehr

Gliederung Grundlagen Schlüsselworte try-catch Fehlerobjekte Fehlerklassen Schlüsselwort finally Schlüsselwort throws selbst erstellte Exceptions

Gliederung Grundlagen Schlüsselworte try-catch Fehlerobjekte Fehlerklassen Schlüsselwort finally Schlüsselwort throws selbst erstellte Exceptions try-catch Schlüsselworte try-catch e Schlüsselwort Schlüsselwort selbst erstellte ermöglichen die Behandlung von Fehlern, die zur Laufzeit entstehen. try-catch in C: Fehler führt immer zum Abbruch des

Mehr

Repetitorium Informatik (Java)

Repetitorium Informatik (Java) Repetitorium Informatik (Java) Tag 6 Lehrstuhl für Informatik 2 (Programmiersysteme) Übersicht 1 Klassen und Objekte Objektorientierung Begrifflichkeiten Deklaration von Klassen Instanzmethoden/-variablen

Mehr

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 14/15. Kapitel 11. Fehler und Ausnahmen 1

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 14/15. Kapitel 11. Fehler und Ausnahmen 1 Kapitel 11 Fehler und Ausnahmen Fehler und Ausnahmen 1 Ziele Fehlerquellen in Programmen und bei der Programmausführung verstehen Das Java-Konzept der Ausnahmen als Objekte kennenlernen Ausnahmen auslösen

Mehr

Schedulingund Thread-Ausführer

Schedulingund Thread-Ausführer Schedulingund Thread-Ausführer Scheduling Ein Scheduler arbeitet Programmstücke nach einer festen Zeitspanne oder zu einer fixen Zeitpunkt wiederholt oder einmal ab. Notwendigkeiten für Scheduling sind

Mehr

Multi-Threading. Ralf Abramowitsch Vector Informatik GmbH [email protected]

Multi-Threading. Ralf Abramowitsch Vector Informatik GmbH abramowitsch@lehre.dhbw-stuttgart.de Multi-Threading Ralf Abramowitsch Vector Informatik GmbH [email protected] Einführung in Threads Threads synchronisieren ThreadPools Thread = unabhängiger Ausführungspfad, der gleichzeitig

Mehr

Einführung in die Programmierung 1

Einführung in die Programmierung 1 Einführung in die Programmierung 1 Einführung (S.2) Einrichten von Eclipse (S.4) Mein Erstes Programm (S.5) Hallo Welt!? Programm Der Mensch (S.11) Klassen (S.12) Einführung Wie Funktioniert Code? Geschriebener

Mehr

Übersicht. Informatik 2 Teil 3 Anwendungsbeispiel für objektorientierte Programmierung

Übersicht. Informatik 2 Teil 3 Anwendungsbeispiel für objektorientierte Programmierung Übersicht 3.1 Modell Konto 3.2 Modell Konto - Erläuterungen 3.3 Benutzer Ein- und Ausgabe mit Dialogfenster I 3.4 Benutzer Ein- und Ausgabe mit Dialogfenster II 3.5 Klassen- und Objekteigenschaften des

Mehr

Musterlösung Übungsblatt 2 Netzprogrammierung WS 05/06

Musterlösung Übungsblatt 2 Netzprogrammierung WS 05/06 Musterlösung Übungsblatt 2 Netzprogrammierung WS 05/06 Aufgabe 1 Bitte schreiben Sie ein RMI Objekt, das eine Person repräsentiert. Es soll die folgende Schnittstelle implementieren: public interface Person

Mehr

Javakurs für Anfänger

Javakurs für Anfänger Javakurs für Anfänger Einheit 03: Wiederholung und Nutzereingaben Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda 1. Teil: Wiederholung Klassen, Objekte, Attribute und Methoden

Mehr

Anleitung. Ein einfaches RMI-Beispiel. (ab Java 5.0) c Y. Pfeifer. (Juni 2014)

Anleitung. Ein einfaches RMI-Beispiel. (ab Java 5.0) c Y. Pfeifer. (Juni 2014) Anleitung Ein einfaches RMI-Beispiel (ab Java.0) c Y. Pfeifer (Juni 014) 1 Ein einfaches RMI-Beispiel Vorgehensweise: 1. Java Projekt anlegen. Zwei Packages server & client erstellen Auf der Server-Seite

Mehr

2A Basistechniken: Weitere Aufgaben

2A Basistechniken: Weitere Aufgaben 2A Basistechniken: Weitere Aufgaben 2A.3 Programmierung unter UNIX/Linux 1. Gegeben sind einige Ausschnitte von C-Programmen, die unter UNIX/Linux ausgeführt werden sollen. Beantworten Sie die zugehörigen

Mehr

Programmieren in Java

Programmieren in Java Programmieren in Java objektorientierte Programmierung 2 2 Zusammenhang Klasse-Datei In jeder *.java Datei kann es genau eine public-klasse geben wobei Klassen- und Dateiname übereinstimmen. Es können

Mehr

Exceptions. Prof. Dr. Margarita Esponda SS 2012. M. Esponda-Argüero

Exceptions. Prof. Dr. Margarita Esponda SS 2012. M. Esponda-Argüero Exceptions Prof. Dr. Margarita Esponda SS 2012 1 Ausnahmen Eine Ausnahme (Exception) ist ein Fehler oder ein nicht geplantes Ereignis, das während der Ausführung eines Programms vorkommt und dessen normalen

Mehr

Remote Method Invocation

Remote Method Invocation Remote Method Invocation spezielle Technik aus dem Java-Umfeld Ausführung der Methoden auf einem entfernten Rechner Analogon zum RPC (Remote Procedure Call) Zweck: Objekte in verschiedenen Java-VM s Aufruf

Mehr

Theorie zu Übung 8 Implementierung in Java

Theorie zu Übung 8 Implementierung in Java Universität Stuttgart Institut für Automatisierungstechnik und Softwaresysteme Prof. Dr.-Ing. M. Weyrich Theorie zu Übung 8 Implementierung in Java Klasse in Java Die Klasse wird durch das class-konzept

Mehr

3 Objektorientierte Konzepte in Java

3 Objektorientierte Konzepte in Java 3 Objektorientierte Konzepte in Java 3.1 Klassendeklarationen Fragen an die Klassendeklaration: Wie heißt die Klasse? Wer darf auf die Klasse und ihre Attribute/Methoden zugreifen? Ist die Klasse eine

Mehr

Allgemeine Informatik II SS :30-13:30 Uhr

Allgemeine Informatik II SS :30-13:30 Uhr TU Darmstadt FB Informatik Prof. J. Fürnkranz Vordiplomsklausur - Lösungsvorschlag Allgemeine Informatik II SS 2005 15.09.2005 11:30-13:30 Uhr Hinweise: Als Hilfsmittel ist nur ein schwarzer oder blauer

Mehr

3. Anweisungen und Kontrollstrukturen

3. Anweisungen und Kontrollstrukturen 3. Kontrollstrukturen Anweisungen und Blöcke 3. Anweisungen und Kontrollstrukturen Mit Kontrollstrukturen können wir den Ablauf eines Programmes beeinflussen, z.b. ob oder in welcher Reihenfolge Anweisungen

Mehr

Multithreading ab Java 5: Die neuen Concurrency APIs

Multithreading ab Java 5: Die neuen Concurrency APIs Multithreading ab Java 5: Die neuen Concurrency APIs Java Concurrency Spezifiziert in JSR166 Ab Java 5 fester Bestandteil von Java Durch zusätzliche Library auch vor Java 5 vorhanden backport-util-concurrent

Mehr

Kapitel 9: Klassen und höhere Datentypen. Klassen und höhere. Objekte, Felder, Methoden. Küchlin/Weber: Einführung in die Informatik

Kapitel 9: Klassen und höhere Datentypen. Klassen und höhere. Objekte, Felder, Methoden. Küchlin/Weber: Einführung in die Informatik Klassen und höhere Datentypen Objekte, Felder, Methoden Küchlin/Weber: Einführung in die Informatik Klassen Klasse (class) stellt einen (i.a. benutzerdefinierten) Verbund-Datentyp dar Objekte sind Instanzen

Mehr

Betriebssysteme. Wintersemester 2015. Kapitel 2 Prozess und Threads. Patrick Kendzo [email protected]

Betriebssysteme. Wintersemester 2015. Kapitel 2 Prozess und Threads. Patrick Kendzo ppkendzo@gmail.com Betriebssysteme Wintersemester 2015 Kapitel 2 Prozess und Threads Patrick Kendzo [email protected] Programm Inhalt Einleitung Prozesse und Threads Speicherverwaltung Eingabe und Ausgabe Dateisysteme Zusammenfassung

Mehr

Zusammenfassung Modul 223

Zusammenfassung Modul 223 Zusammenfassung Modul 223 von Christian Roth Powered by Schuschu Bison Schweiz AG, Surentalstrasse 10, CH-6210 Sursee, www.bison-group.com Inhaltsverzeichnis 1 Entwurfmuster... 3 1.1 Singleton... 3 1.1.1

Mehr

Systeme 1. Kapitel 6. Nebenläufigkeit und wechselseitiger Ausschluss

Systeme 1. Kapitel 6. Nebenläufigkeit und wechselseitiger Ausschluss Systeme 1 Kapitel 6 Nebenläufigkeit und wechselseitiger Ausschluss Threads Die Adressräume verschiedener Prozesse sind getrennt und geschützt gegen den Zugriff anderer Prozesse. Threads sind leichtgewichtige

Mehr

Monitore. Klicken bearbeiten

Monitore. Klicken bearbeiten Sascha Kretzschmann Institut für Informatik Monitore Formatvorlage und deren Umsetzung des Untertitelmasters durch Klicken bearbeiten Inhalt 1. Monitore und Concurrent Pascal 1.1 Warum Monitore? 1.2 Monitordefinition

Mehr

Probeklausur: Programmierung WS04/05

Probeklausur: Programmierung WS04/05 Probeklausur: Programmierung WS04/05 Name: Hinweise zur Bearbeitung Nimm Dir für diese Klausur ausreichend Zeit, und sorge dafür, dass Du nicht gestört wirst. Die Klausur ist für 90 Minuten angesetzt,

Mehr

Prof. Dr. Uwe Schmidt. 21. August 2007. Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252)

Prof. Dr. Uwe Schmidt. 21. August 2007. Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252) Prof. Dr. Uwe Schmidt 21. August 2007 Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252) Zeit: 75 Minuten erlaubte Hilfsmittel: keine Bitte tragen Sie Ihre Antworten und fertigen

Mehr

9 Multithreading. 1 Idee des Multithreading

9 Multithreading. 1 Idee des Multithreading 9 Multithreading Jörn Loviscach Versionsstand: 21. Juli 2015, 11:50 Die nummerierten Felder sind absichtlich leer, zum Ausfüllen beim Ansehen der Videos: http://www.j3l7h.de/videos.html This work is licensed

Mehr

Vorname: Nachname: Matrikelnummer: Klausur. Betriebssysteme

Vorname: Nachname: Matrikelnummer: Klausur. Betriebssysteme Vorname: Nachname: Matrikelnummer: Klausur Betriebssysteme 12.02.2013 Hinweise: 1. Beschriften Sie als erstes diese Seite mit Ihrem Namen, Vornamen und Ihrer Matrikelnummer (deutlich in Druckbuchstaben).

Mehr

Java-Schulung Grundlagen

Java-Schulung Grundlagen Java-Schulung Grundlagen Java 2 Standard Edition JDK 5 / 6 31.05.2008 Marcel Wieczorek 1 Themenübersicht Basiswissen Objektorientierung Datentypen Fehlerbehandlung Sonstiges Einführung Klassen, Strings

Mehr

Javakurs zu Informatik I. Henning Heitkötter

Javakurs zu Informatik I. Henning Heitkötter Javakurs zu Informatik I Arrays vergleichen Implementieren Sie folgende Methode, die prüft, ob die Elemente der beiden Arrays an jeder Position übereinstimmen: public static boolean identisch(int[] a,

Mehr

Sequentielle Programm- / Funktionsausführung innerhalb eines Prozesses ( thread = Ausführungsfaden )

Sequentielle Programm- / Funktionsausführung innerhalb eines Prozesses ( thread = Ausführungsfaden ) Threads Sequentielle Programm- / Funktionsausführung innerhalb eines Prozesses ( thread = Ausführungsfaden ) Ein thread bearbeitet eine sequentielle Teilaufgabe innerhalb eines Prozesses Mehrere nebenläufige

Mehr

7. Objektorientierte Softwareentwicklung/3. Informatik II für Verkehrsingenieure

7. Objektorientierte Softwareentwicklung/3. Informatik II für Verkehrsingenieure 7. Objektorientierte Softwareentwicklung/3 Informatik II für Verkehrsingenieure Überblick FOLGENDE BEGRIFFE/PRINZIPIEN SOLLTEN BEKANNT SEIN Objekte Klasse Attribute Fähigkeiten ZIEL DER HEUTIGEN LEHRVERANSTALTUNG

Mehr

Java RMI Remote Method Invocation

Java RMI Remote Method Invocation Java RMI Remote Method Invocation Ziel: Aufruf von Instanzmethoden entfernter Objekte basierend auf Java. Paket: java.rmi und Unterpakete Topologie: RMI Registry RMI Server RMI Client Der Server registriert

Mehr

Sven Osterwald Concurrent Objects. Proseminar Parallele Programmierung in Java

Sven Osterwald Concurrent Objects. Proseminar Parallele Programmierung in Java Sven Osterwald 12.05.2010 Concurrent Objects Proseminar Parallele Programmierung in Java Überblick 1. Einführung 2. Beispiel FIFO-Queue mit und ohne Lock 3. Korrektheit bei sequentiellen Objekten 4. Korrektheit

Mehr

Operating System Kernels

Operating System Kernels Operating System Kernels von Patrick Bitterling 1 Themenübersicht -Eine Einleitung über Kernel -Begriffserklärung, Architekturen -Kernel Subsysteme -Prozess-Scheduling, Speichermanagement,... -Der Networking

Mehr

Nebenläufige Programmierung in Java

Nebenläufige Programmierung in Java Informatik IV 37-004 SS 2002 Thomas Gross Diese Slides kommen ohne Gewähr. 9-1 Thomas Gross 1997-2000 Nebenläufige Programmierung in Java Threads und deren Zustände Speichermodell Einfache Synchronisation

Mehr

Java Fehlerbehandlung

Java Fehlerbehandlung Java Fehlerbehandlung 1 Fehlerbehandlung In jedem nicht-trivialen Programm kann es während der Laufzeit zu Fehlersituationen kommen. Dabei handelt es sich nicht unbedingt um Programmierfehler: z. B.: Programm

Mehr

Präsentation Interfaces

Präsentation Interfaces Einführung in Java Präsentation Interfaces Nozar Delassaei Marvi Inhalt 1. Erinnerung Klasse Objekte Beispiel Klasse Abstrakte Klasse Beispiel Abstrakte Klasse Mehrfachvererbung-1 Mehrfachvererbung-2 2.

Mehr

Synchronisation von Variablen und Operationen (gemeinsamer Speicher)

Synchronisation von Variablen und Operationen (gemeinsamer Speicher) Synchronisation von Variablen und Operationen (gemeinsamer Speicher) Vorbemerkung Beispiel für Wettlaufbedingungen Threadsicherheit Unveränderliche Objekte Volatile-Deklaration Atomare Operationen Lock-Mechanismen

Mehr

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 3 - Objektorientierung Warum Objektorientierung Daten und Funktionen möglichst eng koppeln und nach außen kapseln Komplexität der Software besser modellieren

Mehr

Studentische Lösung zum Übungsblatt Nr. 7

Studentische Lösung zum Übungsblatt Nr. 7 Studentische Lösung zum Übungsblatt Nr. 7 Aufgabe 1) Dynamische Warteschlange public class UltimateOrderQueue private Order[] inhalt; private int hinten; // zeigt auf erstes freies Element private int

Mehr

5.5.8 Öffentliche und private Eigenschaften

5.5.8 Öffentliche und private Eigenschaften 5.5.8 Öffentliche und private Eigenschaften Schnittstellen vs. Implementierungen: Schnittstelle einer Klasse beschreibt, was eine Klasse leistet und wie sie benutzt werden kann, ohne dass ihre Implementierung

Mehr

Kapitel 6. Vererbung

Kapitel 6. Vererbung 1 Kapitel 6 2 Ziele Das sprinzip der objektorientierten Programmierung verstehen Und in Java umsetzen können Insbesondere folgende Begriffe verstehen und anwenden können: Ober/Unterklassen Subtyping Überschreiben

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java Vorlesung vom 18.4.07, Grundlagen Übersicht 1 Kommentare 2 Bezeichner für Klassen, Methoden, Variablen 3 White Space Zeichen 4 Wortsymbole 5 Interpunktionszeichen 6 Operatoren 7 import Anweisungen 8 Form

Mehr

Android Processes & Services

Android Processes & Services Android Processes & Services Jürg Luthiger University of Applied Sciences Northwestern Switzerland Institute for Mobile and Distributed Systems Ziele heute Arbeitsblatt 4 besprechen (inkl. Repetition)

Mehr

Kapitel 6. Vererbung

Kapitel 6. Vererbung 1 Kapitel 6 2 Ziele Das sprinzip der objektorientierten Programmierung verstehen Und in Java umsetzen können Insbesondere folgende Begriffe verstehen und anwenden können: Ober/Unterklassen Subtyping Überschreiben

Mehr

Probeklausur: Programmierung WS04/05

Probeklausur: Programmierung WS04/05 Probeklausur: Programmierung WS04/05 Name: Hinweise zur Bearbeitung Nimm Dir für diese Klausur ausreichend Zeit, und sorge dafür, dass Du nicht gestört wirst. Die Klausur ist für 90 Minuten angesetzt,

Mehr

Technische Informatik II

Technische Informatik II Institut für Technische Informatik und Kommunikationsnetze Technische Informatik II Übung 1: Prozesse und Threads Aufgabe 1: Prozesse und Threads a) Wie verhält sich eine Applikation die aus mehreren Prozessen

Mehr

6 Speicherorganisation

6 Speicherorganisation Der Speicher des Programms ist in verschiedene Speicherbereiche untergliedert Speicherbereiche, die den eigentlichen Programmcode und den Code der Laufzeitbibliothek enthalten; einen Speicherbereich für

Mehr

6. Tutorium zu Softwaretechnik I

6. Tutorium zu Softwaretechnik I 6. Tutorium zu Softwaretechnik I Parallelität und Testen Michael Hoff 01.07.2014 INSTITUT FÜR PROGRAMMSTRUKTUREN UND DATENORGANISATION KIT Universität des Landes Baden-Württemberg und nationales Forschungszentrum

Mehr

Lehr- und Forschungsgebiet Informatik 2. Proseminar-Arbeit. über das Thema Multithreading und Synchronisation in Java. Jens Bürger

Lehr- und Forschungsgebiet Informatik 2. Proseminar-Arbeit. über das Thema Multithreading und Synchronisation in Java. Jens Bürger Kapitel 1 Einleitung Lehr- und Forschungsgebiet Informatik 2 Proseminar-Arbeit über das Thema Multithreading und Synchronisation in Java Autoren: Betreuerin: Isabel Klöter Jens Bürger Jera Hensel Abgabedatum:

Mehr

Beispiel Klausuraufgaben

Beispiel Klausuraufgaben Beispiel Klausuraufgaben HINWEIS: In diesem Dokument befinden sich mehrere Aufgaben. Es ist keine Beispielklausur. In der Klausur werden nur ca. 2 Aufgaben zu meinen Themengebieten (Nebenläufigkeit, Visuelle

Mehr

JAVA - Methoden - Rekursion

JAVA - Methoden - Rekursion Übungen Informatik I JAVA - Methoden - Rekursion http://www.fbi-lkt.fh-karlsruhe.de/lab/info01/tutorial Übungen Informatik 1 1 Methoden Methoden sind eine Zusammenfassung von Deklarationen und Anweisungen

Mehr

Grundzüge der Programmierung. Wiederverwendung VERERBUNG

Grundzüge der Programmierung. Wiederverwendung VERERBUNG Grundzüge der Programmierung Wiederverwendung VERERBUNG Inhalt dieser Einheit Syntax: Vererbung in Java Superklassen - Subklassen Konstruktorenaufruf in Subklassen super, abstract und final 2 Code-Reuse

Mehr

Javakurs für Anfänger

Javakurs für Anfänger Javakurs für Anfänger Einheit 13: Ausnahmen Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda Ausnahmen (Exceptions) Motivation Fehlerbehandlung Klassenhierarchie Checked vs. Unchecked

Mehr

Remote Method Invocation

Remote Method Invocation Remote Method Invocation Aufruf von Methoden über die Grenzen der VM hinweg. Javaprozesse der rufenden und gerufenen Methode können auf verschiedenen Hosts laufen. Eine RMI-Applikation besteht aus dem

Mehr

Problemstellung. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 24: Reflection 1. IDE und automatische Tests.

Problemstellung. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 24: Reflection 1. IDE und automatische Tests. Universität Osnabrück 1 Problemstellung 3 - Objektorientierte Programmierung in Java Vorlesung 24: Reflection 1 SS 2006 Prof. Dr. Frank M. Thiesing, FH Osnabrück Um ein Objekt anzulegen, eine seiner Methoden

Mehr

Überblick. Middleware - Übung. Threads in Java. Was ist ein Thread? Multithreading in Java Threads Synchronisation Koordinierung

Überblick. Middleware - Übung. Threads in Java. Was ist ein Thread? Multithreading in Java Threads Synchronisation Koordinierung Überblick Middleware - Übung Tobias Distler, Michael Gernoth, Rüdiger Kapitza Friedrich-Alexander-Universität Erlangen-Nürnberg Lehrstuhl Informatik 4 (Verteilte Systeme und Betriebssysteme) www4.informatik.uni-erlangen.de

Mehr

Objektorientierte Programmierung. Kapitel 12: Interfaces

Objektorientierte Programmierung. Kapitel 12: Interfaces 12. Interfaces 1/14 Objektorientierte Programmierung Kapitel 12: Interfaces Stefan Brass Martin-Luther-Universität Halle-Wittenberg Wintersemester 2012/13 http://www.informatik.uni-halle.de/ brass/oop12/

Mehr

Java Schulung (Java 2 Java Development Kit 5 / 6)

Java Schulung (Java 2 Java Development Kit 5 / 6) 2. Grundlagen der Objektorientierung 2.1 Klassen, Attribute, Methoden Klassen Eine Klasse beschreibt als Bauplan Gemeinsamkeiten einer Menge von Objekten ist also ein Modell, auf dessen Basis Objekte erstellt

Mehr