Java Solutions. Programmier- und Architekturlösungen für die Java-Plattform. Bearbeitet von Markus Kopp, Gerhard Wilhelms

Größe: px
Ab Seite anzeigen:

Download "Java Solutions. Programmier- und Architekturlösungen für die Java-Plattform. Bearbeitet von Markus Kopp, Gerhard Wilhelms"

Transkript

1 Java Solutions Programmier- und Architekturlösungen für die Java-Plattform Bearbeitet von Markus Kopp, Gerhard Wilhelms 1. Auflage Buch. 400 S. Hardcover ISBN Format (B x L): 17,7 x 24,4 cm Gewicht: 897 g Zu Inhaltsverzeichnis schnell und portofrei erhältlich bei Die Online-Fachbuchhandlung beck-shop.de ist spezialisiert auf Fachbücher, insbesondere Recht, Steuern und Wirtschaft. Im Sortiment finden Sie alle Medien (Bücher, Zeitschriften, CDs, ebooks, etc.) aller Verlage. Ergänzt wird das Programm durch Services wie Neuerscheinungsdienst oder Zusammenstellungen von Büchern zu Sonderpreisen. Der Shop führt mehr als 8 Millionen Produkte.

2 2 Threads 2.1 Einleitung Mit dem Thread-Konzept steht uns Java-Programmierern eine Möglichkeit zur Verfügung, Programmteile quasi parallel ausführen zu lassen. Quasi parallel bedeutet, dass die Programmteile nicht wirklich parallel ausgeführt werden (außer eventuell bei Multi-Prozessor-Systemen), die Java Virtual Machine schaltet zwischen den einzelnen Ausführungen hin und her, so dass der Eindruck der Parallelität geweckt wird. Anders als bei Prozessen erhalten Threads beim Start keinen eigenen Speicherraum zugewiesen. Alle in einer Applikation gestarteten Threads müssen sich den gemeinsamen Speicher mit der Applikation teilen. Aus diesem Grunde werden Threads auch als leichtgewichtige Prozesse bezeichnet. Die gemeinsame Speichernutzung besitzt den Vorteil, dass die Erzeugung und der Start eines Threads deutlich weniger Systemressourcen und Zeit als der Start eines Prozesses benötigen. Außerdem können Threads sehr einfach miteinander über den gemeinsamen Speicher kommunizieren und benötigen nicht das Konzept des Shared Memory. Die Verwendung von gemeinsamem Speicher besitzt allerdings den Nachteil, dass der Zugriff auf diesen Speicher synchronisiert werden muss. Stellen Sie sich vor, Sie

3 44 2 Threads schreiben gerade einen Wert in eine (öffentliche) Variable, und bei der nächsten Verwendung besitzt die Variable einen anderen Wert, da ein anderer Thread der Meinung war, ebenfalls in diese Variable schreiben zu müssen. Das dabei entstandende Ergebnis entspricht höchstwahrscheinlich nicht Ihren Vorstellungen ganz zu schweigen von der Schwierigkeit, einen solchen Fehler ausfindig zu machen. Doch bevor Sie jetzt anfangen, alle Speicherzugriffe zu synchronisieren (und damit Ihre Applikation auszubremsen), sollten Sie sich vor der Verwendung von Threads ein paar Gedanken machen. Dann werden Sie schnell feststellen, welche Speicherbereiche, d.h., welche Variablen, Methoden und Klassen synchronisiert werden sollten und welche nicht. In den nachfolgenden Abschnitten werden wir Ihnen zeigen, wie Sie Threads erzeugen, starten, beenden und unterbrechen können, wie Sie Zugriffe synchronisieren und wie Sie kurzlebige Threads vermeiden, indem Sie einen Thread-Pool verwenden. 2.2 Threads richtig anwenden Problem: Wie kann ich einen neuen Thread starten? Lösung: Alle Threads erben von der java.lang.runnable-schnittstelle und müssen somit die run-methode implementieren. Zum Start eines neuen Threads müssen Sie diese Implementierung an ein neues java.lang.thread-objekt übergeben und die start-methode aufrufen. Alles Weitere übernimmt das Thread-Objekt. Dies ist die allgemeine Möglichkeit zum Start eines Threads. Es gibt aber auch noch eine zweite Möglichkeit, indem Ihre Klasse nicht die Runnable-Schnittstelle direkt implementiert, sondern von der Threads-Klasse erbt. Die Threads-Klasse implementiert ihrerseits die Runnable-Schnittstelle, so dass Sie in diesem Fall nur noch die run-methode in Ihrer Klasse überschreiben müssen. Wenn die Klasse, die Sie gerne als Thread hätten, bereits von einer anderen Klasse erbt, bleibt Ihnen nur die Möglichkeit übrig, die Runnable-Schnittstelle zu implementieren und somit die erste Möglichkeit für das Starten eines Threads zu verwenden. Erbt Ihre Klasse noch von keiner anderen (außer von java.lang.object) können Sie die zweite Möglichkeit verwenden, die beim Erzeugen etwas kürzer ist. Problem: Wie kann ich einen Thread beenden?

4 2.2 Threads richtig anwenden 45 Lösung: Threads werden automatisch beendet, wenn die run-methode verlassen wird. Dies kann entweder durch die korrekte Beendigung dieser Methode oder durch das Auslösen einer Exception erfolgen. Beispiel: Die zwei nachfolgenden Beispiele stellen je ein Template für die beiden besprochenen Möglichkeiten dar, wie ein Thread erzeugt, gestartet und wieder beendet werden kann. Programm 2.1 Thread-Template als Runnable-Schnittstelle public class RunnableTemplate implements Runnable { private boolean isrunning; public void run() { isrunning = true; while( isrunning ) { // hier wird die Arbeit des Threads gemacht catch( Exception e ) { System.err.println("Exception in Thread verursacht" + " das Beenden dieses Threads."); isrunning = false; public void stopme() { isrunning = false; public boolean isrunning() { return isrunning; public static void main(string[] args) { RunnableTemplate rt = new RunnableTemplate(); Thread th = new Thread(rt); th.start(); //... rt.stopme(); Das erste Template zeigt die Implementierung der Runnable-Schnittstelle. Bei diesem Ansatz wird ein neuer Thread erzeugt, indem ein Objekt der Klasse Runnable Template im Konstruktor eines neuen Threads übergeben wird:

5 46 2 Threads RunnableTemplate rt = new RunnableTemplate(); Thread th = new Thread(rt); Dieser Thread wird durch Aufruf der start-methode gestartet: th.start(); Dieser Aufruf bewirkt, dass die Java Virtual Machine einen neuen Thread erzeugt und in diesem Thread die run-methode des RunnableTemplate-Objekts aufruft. Die run-methode der Klasse RunnableTemplate besteht aus einer Schleife, die so lange durchlaufen wird, bis das Attribut isrunning den Wert false hat. Dies kann entweder durch eine Exception innerhalb der while-schleife passieren oder durch Aufruf der stopme-methode. Dadurch wird die while-schleife und damit auch die run-methode beendet, was zur Folge hat, dass der Thread von der Java Virtual Machine beendet werden kann. Programm 2.2 Ein Thread-Template public class ThreadTemplate extends Thread { private boolean isrunning; public void run() { isrunning = true; while( isrunning ) { // hier wird die Arbeit des Threads gemacht catch( Exception e ) { System.err.println("Exception in Thread verursacht" + " das Beenden dieses Threads."); public void stopme() { isrunning = false; public boolean isrunning() { return isrunning; public static void main(string[] args) { ThreadTemplate tt = new ThreadTemplate(); tt.start(); //... tt.stopme();

6 2.2 Threads richtig anwenden 47 Das zweite Template zeigt die Erweiterung der Thread-Klasse. Dieses Template ist fast identisch mit dem ersten Template. Lediglich das Erzeugen und Starten eines neuen Threads hat sich von drei Zeilen Code auf zwei vereinfacht: ThreadTemplate tt = new ThreadTemplate(); tt.start(); Wenn Ihr Thread die run-methode durchläuft, sollten Sie darauf achten, dass für andere Threads die Gelegenheit zur Ausführung geschaffen wird. Dies erfolgt in der Regel durch das kurzfristige Schlafenlegen des Threads durch den Aufruf der Thread.sleep-Methode. Diese Methode erhält als Argument die maximale Länge in Millisekunden, die sich Ihr Thread ausruhen darf. Einen schlafenden Thread können Sie jederzeit mit dem Aufruf der interrupt-methode aufwecken. Damit Ihr Thread dies mitbekommt, wird innerhalb von sleep eine InterruptedException ausgelöst: Thread.currentThread().sleep(1000); catch( InterruptedException ie ) { // oh, ich wurde aufgeweckt Problem: Wie kann ich einen Interrupt auslösen? Lösung: Zum Auslösen eines Interrupts müssen Sie lediglich die interrupt-methode des Threads aufrufen, den Sie unterbrechen möchten: public class InterruptExample implements Runnable { public final static long SleepingTime = 1000; private boolean isrunning; private Thread thisthread; public void run() { isrunning = true; thisthread = Thread.currentThread(); while( isrunning ) { System.out.println("Ich bin beim " + "Arbeiten..."); Thread.currentThread().sleep(SleepingTime);

7 48 2 Threads catch( InterruptedException ie ) { System.err.println("Ich bin unterbrochen " + "worden..."); public void stopme() { isrunning = false; thisthread.interrupt(); public static void main(string[] args) { InterruptExample ie = new InterruptExample(); Thread th = new Thread(ie); th.start(); ThreadHelper.sleep(1200); ie.stopme(); In diesem Beispiel wird der Thread in der stopme-methode durch Aufruf von this Thread.interrupt() unterbrochen und auch beendet, da die Variable isrunning vor der Unterbrechung auf false gesetzt wurde. Der Nachteil dieser Art, einen Thread zu unterbrechen, ist, dass der Thread keine Möglichkeit hat, seine Arbeit noch zu beenden. Wir werden später eine elegantere Möglichkeit zum Beenden eines Threads kennen lernen, ohne dass dieser abgebrochen wird. Problem: Was soll ich machen, wenn eine InterruptedException ausgelöst wurde? Lösung: Sie sollten überprüfen, was es für einen Grund geben könnte, dass Ihr Thread aufgeweckt wurde. In der Regel stehen nun Daten bereit, auf die Sie gewartet haben, oder jemand möchte, dass Ihr Thread sich nun beendet. Problem: Wie kann ich meinen Thread sonst noch benachrichtigen? Lösung: Haben Sie einen Arbeits-Thread, der, sobald neue Daten vorhanden sind, mit der Arbeit beginnen soll, dann können Sie ihn immer wieder schlafen legen und ihn anschließend wieder mit einem interrupt aufwecken. Da hier eine Exception ausgelöst werden muss, ist dies nicht unbedingt die performanteste Lösung. Deshalb bietet Java uns noch eine andere Möglichkeit.

8 2.2 Threads richtig anwenden 49 Mit den Methoden wait und notify existiert eine elegante Lösung zum Synchronisieren von Threads. Beide Methoden werden in Object definiert und stehen somit jedem Objekt zur Verfügung. Diese Methoden basieren auf dem Monitor-Konzept: Betritt ein Thread einen synchronisierten Bereich, so steht dieser Bereich keinem anderen Thread mehr zur Verfügung. Ruft der erste Thread die wait-methode auf, so wird der Monitor freigegeben, und ein anderer Thread kann in den Bereich. Der erste Thread wartet nun so lange, bis er mit notify wieder aktiviert wird. In diesem Fall kann er gleich weiter arbeiten, da er von dem anderen Thread den Monitor mit dem Aufruf von notify erhalten hat. Um den oben beschriebenen Vorgang zu vereinfachen, verwenden wir die Hilfsklasse aus dem Programm 2.2, welche die beiden Methoden simplywait und simply- Notify zum einfachen Synchronisieren zweier Threads bereitstellt. Programm 2.3 Die Synchronizer-Klasse public class Synchronizer { public void simplywait() { simplywait(-1); public synchronized void simplywait(long time) { if( time > 0 ) { wait(time); else { wait(); catch( InterruptedException e ) { public synchronized void simplynotify() { notifyall(); Beispiel: Das nachfolgende Beispiel zeigt Ihnen, wie Sie wait und notify bzw. simply- Wait und simplynotify zum Synchronisieren von Threads einsetzen können. Das komplette Beispiel können Sie auf der beiliegenden CD finden.

9 50 2 Threads Programm 2.4 Beispiel für wait/notify public class ThreadExample implements Runnable { public final static long SleepingTime = 1000; private boolean isrunning; private Worker worker; private Object[] data= null; Synchronizer sync = new Synchronizer(); private boolean newdatareceived() { // hier wird überprüft, ob neue Daten zum Bearbeiten // durch den "Worker-Thread" vorhanden sind // hier: einfach per Zufall entscheiden // data == null: alte Daten wurden bereits abgeholt if( data == null && Math.random() > 0.6 ) { // Erzeuge neue Zufallsdaten data = new Object[(int)(Math.random() * 10) +1]; for( int i=0; i<data.length; i++ ) { data[i] = new Integer((int)(Math.random() * 27)); return data!= null; public Object[] getdata() { Object[] tmp = data; // löschen Daten: data = null; return tmp; public void run() { isrunning = true; worker = new Worker(this); Thread workerthread = new Thread(worker); workerthread.start(); while( isrunning ) { if( newdatareceived() ) sync.simplynotify(); ThreadHelper.sleep(SleepingTime); catch( Exception e ) { System.err.println("Exception in Thread verursacht" + " das Beenden dieses Threads."); isrunning = false;

10 2.2 Threads richtig anwenden 51 public void stopme() { isrunning = false; if( worker!= null ) { worker.stopme(); // benachrichtige den Worker, dass er nun // Feierabend hat - sonst wartet er ewig (1) sync.simplynotify(); worker = null; class Worker implements Runnable { private boolean isrunning; private ThreadExample myboss; Worker(ThreadExample boss) { myboss = boss; public void run() { isrunning = true; while( isrunning ) { (3) dothework(); // warte, bis es wieder etwas zu arbeiten gibt (2) myboss.sync.simplywait(); catch( Exception e ) { System.err.println("Exception in Thread verursacht" + " das Beenden dieses Threads."); isrunning = false;... private void dothework() {... Das obige Beispiel besteht aus zwei Threads, einem Arbeits-Thread (Klasse Worker) und einem zweiten, der die Arbeit organisiert ( Boss ), die der Arbeits-Thread zu erledigen hat. Damit die Vergabe der Arbeit und deren Erledigung effizient gestaltet ist, müssen die zwei Threads sich synchronisieren. In diesem Beispiel verwenden beide Threads ein gemeinsames Synchronizer-Objekt. Liegt eine neue Aufgabe (z. B. neue Daten) an, so ruft der Boss die simplynotify-methode des Synchronizer-

11 52 2 Threads Objekts auf (1). Der Arbeits-Thread hat zuvor die simplywait-methode (2) des Synchronizer-Objekts aufgerufen, um hierüber benachrichtigt zu werden. Nach Beendigung der simplywait-methode überprüft der Arbeits-Thread, ob neue Aufgaben (Daten) für ihn vorliegen oder ob er benachrichtigt wurde, dass er sich beenden soll. Im ersten Fall waren die Daten durch Aufruf der dothework-methode (3) bearbeitet. Anschließend warted der Arbeits-Thread wieder durch Aufruf der simplywait-methode auf weitere Aufgaben/Benachrichtigungen vom Boss. Der Boss muss allerdings aufpassen, dass er den Arbeiter nur dann benachrichtigt, wenn dieser auch darauf wartet. Ist dieser nämlich mit seiner Arbeit beschäftigt, so ignoriert dieser jede Benachrichtigung für weitere Aufgaben. Mit diesem Wissen über das Synchronisieren von Threads können die obigen Thread- Templates verbessert werden: Stellen Sie sich vor, Sie haben einen Thread, der alle zehn Minuten überprüft, ob und mit welcher Antwortzeit ein HTTP-Server erreichbar ist. Die gesammelten Ergebnisse werden in eine Protokolldatei geschrieben. Beenden Sie diesen Thread durch Aufruf der ersten Version der stopme-methode, so müssen Sie unter Umständen bis zu zehn Minuten warten, bis der Thread merkt, dass er beendet werden soll, und er die offene Protokolldatei schließt. Erst dann kann diese Datei für andere Zwecke verwendet werden. Verwenden Sie hingegen ein interrupt zum Beenden des Threads, dann kann es passieren, dass er während des Schreibens in die Protokolldatei unterbrochen wird und diese in einem nicht definierten Zustand hinterlässt. Beide Varianten sind somit nicht praxistauglich und genau hier kommt unsere obige Synchronizer-Klasse wieder ins Spiel. Anstatt die sleep-methode des aktuellen Threads aufzurufen, wird, wie im obigen Beispiel gezeigt, die simplywait- Methode des Synchronizer-Objekts aufgerufen. Soll dieser Thread früher wieder geweckt werden, so wird die simplynotify-methode des Synchronizer- Objeks aufgerufen. Dieser bemerkt, dass er sich beenden soll, und schließt vorher noch die Protokolldatei, die Sie somit (fast) gleich verwenden können 1. Problem: Ich möchte immer wiederkehrende Aufgaben in Threads auslagern wie kann ich dies erledigen? Lösung: Dazu haben wir uns aus der Unix-Welt inspirieren lassen und einen CronManager programmiert. Dieser Klasse können Jobs, die die Schnittstelle CronJob implementieren, übergeben werden. Diese Jobs werden anschließend in frei wählbaren Intervallen in einem eigenen Thread ausgeführt. 1 Hier empfiehlt es sich, etwas zu warten, damit der Thread Zeit hat, die Datei zu schließen.

12 2.2 Threads richtig anwenden 53 Alle zur Verfügung stehenden Methoden des CronManager sind statisch. Somit steht immer nur ein CronManager pro Applikation zur Verfügung. Die nachfolgenden Tabellen beschreiben die Methoden der Schnittstelle CronJob und der Klassen CronManager. Beide Klassen befinden sich auf der beiliegenden CD in dem Package threads. Methode int getnotifyinterval() void cron() Beschreibung Liefert die Zeit (in Sekunden), wann dieser Job das nächste Mal aufgerufen werden möchte. Diese Methode wird alle getnotify Interval() Sekunden von dem Cron Manager-Thread aufgerufen. Hier können Sie Ihren Job ausführen. Tabelle 2.1: Methoden der Klasse CronJob Methode static void addcronjob(cronjob cj) static void remove- CronJob(CronJob cj) static boolean iselement(cronjob cj) Beschreibung Fügt einen neuen CronJob hinzu. Löscht den angegebenen CronJob. Liefert true, falls der angegebene CronJob im CronManager enthalten ist. Tabelle 2.2: Methoden der Klasse CronManager Nachfolgendes Beispiel demonstriert die Verwendung des CronManagers. Dieses Beispiel finden Sie auf der beiliegenden CD in dem Verzeichnis src/threads. public class CronExample implements CronJob { public int getnotifyinterval() { // benachrichtige mich einmal/sekunde return 1; public void cron() {

13 54 2 Threads System.out.println("cron wurde aufgerufen."); public static void main(string[] args) { CronExample ex = new CronExample(); CronManager.addCronJob(ex); int read = System.in.read(); catch( java.io.ioexception ioe) { System.err.println("Fehler beim Lesen: " + ioe); CronManager.removeCronJob(ex); System.out.println("Programm wurde beendet."); Die obige Beispielklasse CronExample implementiert die CronJob-Schnittstelle. Diese Schnittstelle definiert die beiden Methoden cron und getnotifyinterval. Beide Klassen befinden sich auf der beiliegenden CD in dem Verzeichnis src/threads. In der main-methode der Beispielklasse wird eine Instanz der Klasse CronExample erzeugt, die anschließend der statischen Methode addcronjob der Cron Manager-Klasse übergeben wird. Diese ruft zuerst die cron-methode in einem eigenen Thread des CronManagers auf. Danach wird das Benachrichtigungsintervall durch Aufruf der Methode getnotifyinterval ermittelt, und nach dem Verstreichen dieses Intervalls beginnen diese zwei Schritte wieder von vorne. Der main-thread wartet zwischenzeitlich auf eine Tastatureingabe, die zur Beendigung führt. Vor dem Ende wird unser Job für fertig erklärt und aus dem Cron Manager entfernt. 2.3 Ein Thread-Pool Problem: Ich benötige immer wieder für kurze Zeit einen Thread. Wie kann ich es vermeiden, ständig neue Thread-Objekte zu erzeugen und zu starten? Lösung: Verwenden Sie einen Thread-Pool. Ein Thread-Pool ist eine Klasse, welche mehrere Threads verwaltet und Ihnen bei Bedarf einen zum Arbeiten gibt. Wurde Ihre Arbeit

14 2.3 Ein Thread-Pool 55 beendet, so kommt der Thread zurück in den Pool und wartet auf neue Aufgaben. Leider ist ein Thread-Pool nicht Bestandteil des JDK, weshalb wir unseren eigenen programmiert haben. Die nachfolgende Tabelle 2.3 gibt Ihnen einen Überblick über die zur Verfügung stehenden Methoden der Klasse ThreadPool. Ein neues ThreadPool-Objekt wird erzeugt, indem dem Konstruktor ein Name und die maximale Anzahl der Threads übergeben wird. Der Name wird benötigt, um allen Threads dieses Pools einen einheitlichen Namen zu geben. Um den ThreadPoolManager verwenden zu können, müssen Sie einfach Ihr Objekt, welches die Runnable-Schnittstelle implementiert, über die run-methode diesem Thread-Pool hinzufügen: // also statt: ThreadRunner tr = new ThreadRunner(); Thread thread = new Thread(tr); thread.start(); // starten Sie ThreadRunner wie folgt: int numthreads = 4; ThreadPoolManager tpm = new ThreadPoolManager("test", numthreads); ThreadRunner tr = new ThreadRunner(); tpm.run(tr); Die run-methode des ThreadPoolManager überprüft, ob gerade ein Thread frei ist. In diesem Fall ruft der erste freie Thread Ihre run-methode auf. Sind alle Threads des Thread-Pools beschäftigt, so wird Ihr Objekt in eine Warteschlange aufgenommen und bearbeitet, sobald ein freier Thread zur Verfügung steht. Falls nie ein Thread frei wird, so wird Ihre run-methode auch nie aufgerufen. Ist diese Einschränkung für Ihre Anwendung nicht tragbar, so können Sie ja in der run- Methode des ThreadPoolManager die Anzahl der Threads einfach um einen gewissen Faktor erhöhen, falls alle Threads belegt sind. Oder Sie schreiben einen Cron Job, der regelmäßig überprüft, ob wartende Threads innerhalb eines gewissen Intervalls auch wirklich bearbeitet werden. Methode void init(int numthreads) boolean isthreadavailable() Beschreibung Initialisiert den Thread-Pool mit der angegebenen Anzahl von Threads und startet diese auch. Liefert true, falls derzeit ein freier Thread zur Verfügung steht. Fortsetzung nächste Seite...

15 56 2 Threads Methode boolean isinit() void run(runnable runnable) void stop() static void stopallthreads() Methoden der Klasse ThreadPoolManager (Forts.) Beschreibung Liefert true, falls dieser Thread-Pool korrekt initialisiert wurde. Falls gerade ein freier Thread vorhanden ist, so wird dieser die run-methode von runnable aufrufen. Ansonsten wird runnable so lange zwischengespeichert, bis ein freier Thread zur Verfügung steht. Beendet alle Threads dieses Pools. Der Aufruf isinit() liefert anschließend false als Ergebnis. Beendet die Threads aller Thread-Pools. Tabelle 2.3: Methoden der Klasse ThreadPoolManager Auf der beiliegenden CD ist der komplette Quellcode der Klasse ThreadPool Manager enthalten.

parallele Prozesse auf sequenziellen Prozessoren Ein Process ist ein typisches Programm, mit eigenem Addressraum im Speicher.

parallele Prozesse auf sequenziellen Prozessoren Ein Process ist ein typisches Programm, mit eigenem Addressraum im Speicher. Threads parallele Prozesse auf sequenziellen Prozessoren Prozesse und Threads Es gibt zwei unterschiedliche Programme: Ein Process ist ein typisches Programm, mit eigenem Addressraum im Speicher. Ein Thread

Mehr

Javakurs für Fortgeschrittene

Javakurs für Fortgeschrittene Javakurs für Fortgeschrittene Einheit 07: Nebenläufigkeit Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda Einführung in die Nebenläufigkeit und Java Thread Konzept: Motivation

Mehr

Praktikum aus Softwareentwicklung 2, Stunde 5

Praktikum aus Softwareentwicklung 2, Stunde 5 Praktikum aus Softwareentwicklung 2, Stunde 5 Lehrziele/Inhalt 1. Threads Threads Threads sind parallele, oder auf Rechnern mit nur einer CPU quasi-parallele, Programmabläufe in Java. Sie können beispielsweise

Mehr

Dr. Monika Meiler. Inhalt

Dr. Monika Meiler. Inhalt Inhalt 15 Parallele Programmierung... 15-2 15.1 Die Klasse java.lang.thread... 15-2 15.2 Beispiel 0-1-Printer als Thread... 15-3 15.3 Das Interface java.lang.runnable... 15-4 15.4 Beispiel 0-1-Printer

Mehr

OOP: Nebenläufigkeiten Threads. Dipl.-Inform. Arnold Willemer

OOP: Nebenläufigkeiten Threads. Dipl.-Inform. Arnold Willemer OOP: Nebenläufigkeiten Threads Dipl.-Inform. Arnold Willemer arnold.willemer@hs-flensburg.de Schlafen für Profis Die C-64-Lösung kocht und blockiert den Prozessor while (!fertig) // nichts tun: busy waiting

Mehr

Lebenszyklus von Threads

Lebenszyklus von Threads Threads Umgangssprachlich Faden, Diskussionsfaden, Gewinde, Faser, Garn, roter Faden Threads ermöglichen Nebenläufigkeit (parallele Ausführung von Anwendungsteilen). Typisch für Threads ist,dass sie zu

Mehr

Parallele Prozesse Prozeß Parallele Prozesse verzahnte Prozesse Nebenläufige Prozesse: Threads Vorlesung Software-Entwicklung / Folie 131 Ziele:

Parallele Prozesse Prozeß Parallele Prozesse verzahnte Prozesse Nebenläufige Prozesse: Threads Vorlesung Software-Entwicklung / Folie 131 Ziele: Parallele Prozesse SWE-131 Prozeß: Ausführung eines sequentiellen Programmstückes in dem zugeordneten Speicher (Adressraum). Veränderlicher Zustand: Speicherinhalt und Programmposition. Parallele Prozesse:

Mehr

(b.) Welche Möglichkeit gibt es, die Methode run so zu verändern, dass Bora Bora IMMER zuletzt ausgegeben wird?

(b.) Welche Möglichkeit gibt es, die Methode run so zu verändern, dass Bora Bora IMMER zuletzt ausgegeben wird? Threads - Seite 1 Threads (1.) (a.) Nehmen Sie das Beispiel 2 von der Folie und ändern Sie dies ab, so dass sie z.b. ein Array von 100 Threads starten können! Testen Sie aber zunächst ihren Kode mit einem

Mehr

Laborskript Verteilte Systeme

Laborskript Verteilte Systeme Laborskript Verteilte Systeme Nebenläufigkeit in Java Prof. Dr. Oliver Haase 1 Threads Java bietet zwei verschiedene Arten an, Threads zu erzeugen und zu starten: Entweder durch Erweitern der Klasse Thread,

Mehr

Prozesszustände (1a)

Prozesszustände (1a) Prozesszustände (1a) NOT EXISTING DELETED CREATED Meta-Zustand (Theoretische Bedeutung) Prozesszustände Multiuser Umfeld (1c) Hintergrund-Prozess - der Prozess startet im Hintergrund - my-commandbin &

Mehr

Wirtschaftsinformatik II Sommersemester Lo sungshinweise zu den Ü bungen P. Mandl, M. Dolag, B. Rottmüller, et al.

Wirtschaftsinformatik II Sommersemester Lo sungshinweise zu den Ü bungen P. Mandl, M. Dolag, B. Rottmüller, et al. Wirtschaftsinformatik II Sommersemester 2016 Lo sungshinweise zu den Ü bungen 2-6 @Prof. P. Mandl, M. Dolag, B. Rottmüller, et al. Seite 1 / 6 Übung 2 Verwendung von Java-Threads Ableitung von Klasse Thread

Mehr

Java Concurrency Utilities

Java Concurrency Utilities Java Concurrency Utilities Java unterstützt seit Java 1.0 Multithreading Java unterstützt das Monitorkonzept mittels der Schlüsselworte synchronized und volatile sowie den java.lang.object Methoden wait(),

Mehr

Vorlesung Informatik II

Vorlesung Informatik II Vorlesung Informatik II Universität Augsburg Wintersemester 2011/2012 Prof. Dr. Bernhard Bauer Folien von: Prof. Dr. Robert Lorenz Lehrprofessur für Informatik 16. Java: Threads für Animationen 1 Motivation

Mehr

Ausnahmebehandlung in Java

Ausnahmebehandlung in Java Ausnahmebehandlung in Java class A { void foo() throws Help, SyntaxError {... class B extends A { void foo() throws Help { if (helpneeded()) throw new Help();... try {... catch (Help e) {... catch (Exception

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Objektorientierte Programmierung Ausnahmebehandlung und Nebenläufigkeit 9. Vorlesung am 15. Dezember 2010 Ausnahmebehandlung in Java class A { void foo() throws Help, SyntaxError {... class B extends A

Mehr

Die Klasse java.lang.object. Thorsten Treffer

Die Klasse java.lang.object. Thorsten Treffer Die Klasse java.lang.object Thorsten Treffer 6. Dezember 2003 1 java.lang.object Die Klassenhierarchie von Java kann als Baum aufgezeichnet werden, dessen Wurzel die Klasse Object ist. Mit anderen Worten:

Mehr

Testen nebenläufiger Objekte

Testen nebenläufiger Objekte Testen nebenläufiger Objekte Threads in Java Julian Lambertz Seminar Tests in Informatik und Statistik im SS 2004 Universität Ulm J.L., Juni 2004 1 Themenüberblick Einleitung Begriff der Nebenläufigkeit

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

Nebenläufigkeit mit Java

Nebenläufigkeit mit Java Nebenläufigkeit mit Java Einheit 03: Synchronisation Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda Synchronisation von Threads Locks Java Monitor-Konzept Lock Freigabe Zusammenspiel

Mehr

Liste Programmieren Java Überblick

Liste Programmieren Java Überblick Liste Programmieren Java Überblick 1 Was ist Java? 2 Klassen und Objekte 3 Vererbung 4 Schnittstellen 5 Innere Klassen 6 Exceptions 7 Funktionsbibliothek 8 Datenstrukturen und Algorithmen 9 Ein-/Ausgabe

Mehr

Nebenläufige Programmierung in Java: Threads

Nebenläufige Programmierung in Java: Threads Nebenläufige Programmierung in Java: Threads Wahlpflicht: Fortgeschrittene Programmierung in Java Jan Henke HAW Hamburg 10. Juni 2011 J. Henke (HAW) Threads 10. Juni 2011 1 / 18 Gliederung 1 Grundlagen

Mehr

Wintersemester 2009/10 Helmut Seidl Institut für Informatik TU München

Wintersemester 2009/10 Helmut Seidl Institut für Informatik TU München Informatik2 Wintersemester 2009/10 Helmut Seidl Institut für Informatik TU München 1 0 Allgemeines Inhalt dieser Vorlesung: Nebenläufigkeit in Java; Funktionales Programmieren mit OCaml :-) 2 1 Threads

Mehr

Softwaretechnik 1 Übung 5

Softwaretechnik 1 Übung 5 Universität Karlsruhe (TH) Forschungsuniversität gegründet 1825 Softwaretechnik 1 Übung 5 2.7.29 Aufgabe 1a) Zeichnen Sie die komplette Vererbungshierarchie der Klasse BufferedOutputStream als UML- Klassendiagramm.

Mehr

Programmieren mit Swing

Programmieren mit Swing Programmieren mit Swing Einführung in die Programmierung mit den Swing-Klassen in Java 2 Bearbeitet von Jürgen Schlierf, Rudolf Weber 1. Auflage 1999. Buch. XII, 235 S. Hardcover ISBN 978 3 446 21151 3

Mehr

Die Unternehmergesellschaft

Die Unternehmergesellschaft Die Unternehmergesellschaft Recht, Besteuerung, Gestaltungspraxis Bearbeitet von Prof. Dr. Dr. hc. Michael Preißer, Gültan Acar 1. Auflage 2016. Buch. 300 S. Hardcover ISBN 978 3 7910 3445 4 Format (B

Mehr

Einführung Verteilte Systeme - Java Threads I -

Einführung Verteilte Systeme - Java Threads I - Einführung Verteilte Systeme - Java Threads I - Prof. Dr. Michael Cebulla 20. November 2014 Fachhochschule Schmalkalden Wintersemester 2014/15 1 / 38 M. Cebulla Verteilte Systeme Gliederung Wiederholung:

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

Threading. Arthur Zaczek. Aug 2015

Threading. Arthur Zaczek. Aug 2015 Arthur Zaczek Aug 2015 1 Threading 1.1 Motivation Threading erlaubt die gleichzeitige Ausführung von mehreren Programmteilen. mehrere gleichzeitige Anfragen: Webserver, Datenbank (zu) lange laufende Berechnungen:

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

Lösungsvorschläge zur Nachklausur zum Kurs 1618 Sommersemester 2001 am

Lösungsvorschläge zur Nachklausur zum Kurs 1618 Sommersemester 2001 am Aufgabe 1 Lösungsvorschläge zur Nachklausur zum Kurs 1618 Sommersemester 2001 am 16.3.2002 Folgende Implementierung löst die gestellte Aufgabe : public interface Figur { public void anzeigen (); public

Mehr

Einführung in die Programmierung Blockkurs Java

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

Mehr

JavaScript objektorientiert

JavaScript objektorientiert JavaScript objektorientiert Verständlicher, flexibler, effizienter programmieren Bearbeitet von Nicholas Zakas 1. Auflage 2014. Taschenbuch. XIV, 122 S. Paperback ISBN 978 3 86490 202 4 Format (B x L):

Mehr

Programmieren II. Nebenläufigkeit. Vorlesung 9. Handout S. 1. Dr. Klaus Höppner. Hochschule Darmstadt Sommersemester Threads. Kritische Bereiche

Programmieren II. Nebenläufigkeit. Vorlesung 9. Handout S. 1. Dr. Klaus Höppner. Hochschule Darmstadt Sommersemester Threads. Kritische Bereiche Programmieren II Dr. Klaus Höppner Hochschule Darmstadt Sommersemester 2010 1 / 24 Threads Kritische Bereiche Reales Beispiel 2 / 24 Nebenläufigkeit Moderne Betriebssysteme unterstützen das Prinzip der

Mehr

Info B VL 17: Deadlocks

Info B VL 17: Deadlocks Info B VL 17: Deadlocks Objektorientiere Programmierung in Java 2003 Ute Schmid (Vorlesung) Elmar Ludwig (Übung) FB Mathematik/Informatik, Universität Osnabrück Info B VL 17: Deadlocks p.327 Conditional

Mehr

Programmierung mit Threads in Java

Programmierung mit Threads in Java Programmierung mit Threads in Java Harald Kosch and Matthias Ohlenroth Institut für Informationstechnologie Universität Klagenfurt H. Kosch Threads in Java 1 Inhalt Grundlagen: Threads und Datenlokalität

Mehr

Aufgabenblatt 6 Musterlösung

Aufgabenblatt 6 Musterlösung Prof. Dr. rer. nat. Roland Wismüller Aufgabenblatt 6 Musterlösung Vorlesung Betriebssysteme I Wintersemester 2018/19 Aufgabe 1: Implementierung von Threads (Bearbeitung zu Hause) Der größte Vorteil ist

Mehr

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

Filme der Kindheit Kindheit im Film

Filme der Kindheit Kindheit im Film Kinder- und Jugendkultur, -literatur und -medien 66 Filme der Kindheit Kindheit im Film Beispiele aus Skandinavien, Mittel- und Osteuropa Bearbeitet von Christine Gölz, Anja Tippner, Karin Hoff 1. Auflage

Mehr

Einführung in die Programmierung

Einführung in die Programmierung Technische Universität München WS 2003/2004 Institut für Informatik Prof. Dr. Christoph Zenger Semestralklausur Einführung in die Programmierung Semestralklausur Java (Lösungsvorschlag) 1 Die Klasse ArrayList

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

Institut für Programmierung und Reaktive Systeme. Java 7. Markus Reschke

Institut für Programmierung und Reaktive Systeme. Java 7. Markus Reschke Institut für Programmierung und Reaktive Systeme Java 7 Markus Reschke 14.10.2014 Vererbung in Java Vererbung ermöglicht es, Klassen zu spezialisieren Wiederverwendung vorhandener Klassen Kindsklasse erhält

Mehr

Klausur Software-Entwicklung September 00

Klausur Software-Entwicklung September 00 Aufgabe 1: Wahrheitstafeln ausgeben (ca. 8 Punkte) Matrikelnr : Ergänzen Sie in folgendem Programm, eine rekursive Funktion, die eine Boole'sche Wahrheitstafel für N Variablen ausgibt. Die Zahl N soll

Mehr

Java I Vorlesung Nebenläufigkeit

Java I Vorlesung Nebenläufigkeit Java I Vorlesung 10 Nebenläufigkeit 28.6.2004 Threads Synchronisation Deadlocks Thread-Kommunikation Innere Klassen Anonyme Klassen Nebenläufigkeit http://java.sun.com/docs/books/tutorial/essential/threads/

Mehr

Fachhochschule Wedel 31. Januar 2004 Prof. Dr. Uwe Schmidt

Fachhochschule Wedel 31. Januar 2004 Prof. Dr. Uwe Schmidt Fachhochschule Wedel 31. Januar 2004 Prof. Dr. Uwe Schmidt Aufgaben zur Klausur C und Objektorientierte Programmierung im WS 2003/04 (WI h103, II h105, MI h353) Zeit: 150 Minuten erlaubte Hilfsmittel:

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

Institut fu r Informatik

Institut fu r Informatik Technische Universita t Mu nchen Institut fu r Informatik Lehrstuhl fu r Bioinformatik Einfu hrung in die Programmierung fu r Bioinformatiker Prof. B. Rost, L. Richter WS 2014/15 Aufgabenblatt 11 19.01.2015

Mehr

Aufgabenblatt 8 Musterlösung

Aufgabenblatt 8 Musterlösung Prof. Dr. rer. nat. Roland Wismüller Aufgabenblatt 8 Musterlösung Vorlesung Betriebssysteme I Wintersemester 2017/18 Aufgabe 1: Erzeuger-Verbraucher Synchronisation (Bearbeitung in der Übungsstunde) Erzeuger-Verbraucher-Problem:

Mehr

Durch die Teil-von-Beziehung soll ausgedrückt werden, dass ein Objekt A als (physikalischer) Teil eines Objekts B angesehen wird. Insbesondere kann ei

Durch die Teil-von-Beziehung soll ausgedrückt werden, dass ein Objekt A als (physikalischer) Teil eines Objekts B angesehen wird. Insbesondere kann ei Lösungsvorschläge zur Klausur zum Kurs 1618 Sommersemester 2001 am 22.9.2001 Aufgabe 1 a) Benutzungsbeziehung: class Kennzeichen class Fahrzeug boolean gueltigeskennzeichen (Kennzeichen kz) Objekte der

Mehr

Teil 5 - Java. Programmstruktur Operatoren Schlüsselwörter Datentypen

Teil 5 - Java. Programmstruktur Operatoren Schlüsselwörter Datentypen Teil 5 - Java Programmstruktur Operatoren Schlüsselwörter Datentypen 1 Kommentare in Java In Java gibt es drei Möglichkeiten zur Kommentierung: // Kommentar Alle Zeichen nach dem // werden ignoriert. für

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

8.6 Visualisierung der Sortieralgorithmen

8.6 Visualisierung der Sortieralgorithmen 8.6 Visualisierung der Sortieralgorithmen 8.6.1 Problemstellung Schauen Sie sich den folgenden Quelltext eines Java-Applets an: import java.awt.*; import javax.swing.*; import java.awt.event.*; public

Mehr

Institut fu r Informatik

Institut fu r Informatik Technische Universita t Mu nchen Institut fu r Informatik Lehrstuhl fu r Bioinformatik Praktikum: Grundlagen der Programmierung Prof. B. Rost, L. Richter WS 2013-14 Aufgabenblatt 9 20. Januar Threads 9.1

Mehr

Philipp Güttler Progwerkstatt Letzte Änderung: Enums, Interfaces, Generics und Threads

Philipp Güttler Progwerkstatt Letzte Änderung: Enums, Interfaces, Generics und Threads Philipp Güttler 18.11.2008 Progwerkstatt Letzte Änderung: 09.12.2009 Enums, Interfaces, Generics und Threads Seite 2 Enums Enums, Interfaces und Generics 17.11.2008 Enum Typen komplexer Datentyp, der festen

Mehr

import java.applet.applet; import java.awt.*; public class Grow extends Applet { public void start() { setbackground(color.orange); } public void

import java.applet.applet; import java.awt.*; public class Grow extends Applet { public void start() { setbackground(color.orange); } public void 22.3 Animation Animation ist eine Bewegung vortäuschende Abfolge von Bildern(evt. mit Ton unterlegt:-) Für das menschliche Auge genügen 24 Bilder pro Sekunde. In der Zeit dazwischen legen wir das Applet

Mehr

EINFÜHRUNG IN DIE PROGRAMMIERUNG

EINFÜHRUNG IN DIE PROGRAMMIERUNG EINFÜHRUNG IN DIE PROGRAMMIERUNG FORTGESCHRITTENE KONZEPTE Tobias Witt!! 26.03.2014 FEHLERBEHANDLUNG KLASSISCHER ANSATZ Fehlercode als Rückgabewert von Methoden! String Fehlercode als String! int Fehlercode

Mehr

Vorlesung Informatik II

Vorlesung Informatik II Vorlesung Informatik II Universität Augsburg Wintersemester 2011/2012 Prof. Dr. Bernhard Bauer Folien von: Prof. Dr. Robert Lorenz Lehrprofessur für Informatik 17. JAVA Kommunikation von Threads 1 Motivation

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

Nebenläufigkeit mit Java

Nebenläufigkeit mit Java Nebenläufigkeit mit Java Einheit 01: Einführung in das Java-Threadkonzept Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda Organisatorisches Ziele, Aufbau und Inhalte Zielgruppe,

Mehr

Informatik II. Semesterklausur

Informatik II. Semesterklausur Universität Augsburg, Institut für Informatik Sommersemester 2003 Prof. Dr. Bernhard Bauer 5. Juli 2003 Stefan Fischer, Dr. Martin Müller Informatik II Semesterklausur Prüfungsmodul Informatik II (SS 2003)

Mehr

Soll die Programm-Ausführung nicht beendet werden, muss der Fehler abgefangen werden. NumberFormatException

Soll die Programm-Ausführung nicht beendet werden, muss der Fehler abgefangen werden. NumberFormatException Soll die Programm-Ausführung nicht beendet werden, muss der Fehler abgefangen werden. Beispiel: NumberFormatException public class Adding extends MiniJava { public static void main(string[] args) { int

Mehr

Objektorientierte Programmierung OOP Objektorientierte Programmierung (OOP) mit Java

Objektorientierte Programmierung OOP Objektorientierte Programmierung (OOP) mit Java 9 Übungen: Applets Objektorientierte Programmierung OOP Objektorientierte Programmierung (OOP) mit Java 1. Java-Applet mit Text 2. Java-Applet mit Bild und Text 3. Java-Applet mit Grafik 9 Applets 4. Java-Applet

Mehr

EINFÜHRUNG IN DIE PROGRAMMIERUNG

EINFÜHRUNG IN DIE PROGRAMMIERUNG EINFÜHRUNG IN DIE PROGRAMMIERUNG FORTGESCHRITTENE KONZEPTE Tobias Witt 26.03.2014 tobias.witt@hhu.de 25.12.01.30 Bürozeiten: 09 Uhr - 12 Uhr FEHLERBEHANDLUNG KLASSISCHER ANSATZ Fehlercode als Rückgabewert

Mehr

Vorkurs Informatik WiSe 15/16

Vorkurs Informatik WiSe 15/16 Java 7 Dr. Werner Struckmann / Stephan Mielke, Jakob Garbe, 21.10.2015 Technische Universität Braunschweig, IPS Überblick OO in Java Vererbung Abstrakte Klassen und Interfaces 21.10.2015 Dr. Werner Struckmann

Mehr

Programmieren in Java -Eingangstest-

Programmieren in Java -Eingangstest- Programmieren in Java -Eingangstest- Nummer: 1. Studiengang: Informatik B.Sc. Informatik M.Sc. ESE B.Sc. ESE M.Sc. Sonstiges: Fachsemester: Bitte Fragen, die Sie nicht beantworten können unbedingt mit

Mehr

Grundlagen in C# und.net

Grundlagen in C# und.net Grundlagen in C# und.net Dipl.-Inf., Dipl.-Ing. (FH) Michael Wilhelm Hochschule Harz FB Automatisierung und Informatik mwilhelm@hs-harz.de Raum 2.202 Tel. 03943 / 659 338 1 Inhalt TabbedPane (Register)

Mehr

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Martin Unold INFORMATIK. Geoinformatik und Vermessung Zusammenfassung Was ist eine Programmiersprache? Eine Sprache, die Formal eindeutig in Maschinenbefehle übersetzbar ist Für Menschen einfacher verständlich ist als Bytecode Zur Formulierung von Datenstrukturen

Mehr

Objektorientierte Programmierung in Java

Objektorientierte Programmierung in Java Objektorientierte Programmierung in Java 1. Auflage Taschenbuch. Paperback ISBN 978 3 8266 7414 3 Weitere Fachgebiete > EDV, Informatik > Programmiersprachen: Methoden > Prozedurorientierte Programmierung

Mehr

Übungsblatt 13. Abgabe / Besprechung in Absprache mit dem Tutor

Übungsblatt 13. Abgabe / Besprechung in Absprache mit dem Tutor Albert-Ludwigs-Universität Freiburg Institut für Informatik Einführung in die Informatik Sommersemester 2013 PD Dr. Cyrill Stachniss Dr. Rainer Kümmerle Übungsblatt 13 Abgabe / Besprechung in Absprache

Mehr

2 Teil 2: Nassi-Schneiderman

2 Teil 2: Nassi-Schneiderman 2 Teil 2: Nassi-Schneiderman Wie kann man Nassi-Schneiderman in einer objektorientierten Sprache verwenden? Jedes Objekt besitzt Methoden, welche die Attribute des Objektes verändern. Das Verhalten der

Mehr

Javakurs für Anfänger

Javakurs für Anfänger Javakurs für Anfänger Einheit 13: Interfaces Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme 1. Teil: Interfaces Motivation Eigenschaften Besonderheiten Anonyme Klassen Lambda-Ausdrücke Praxis:

Mehr

Schlussendlich geben wir die Listen aus. Es kommt zu folgender Ausgabe:

Schlussendlich geben wir die Listen aus. Es kommt zu folgender Ausgabe: Musterlösung Übung 7 Aufgabe 1 Sehen wir uns zu allererst das gegebene Forth Programm an: 0 3 new - list constant list1 list1 5 new - list constant list2 list1 6 new - list constant list3 list2 2 new -

Mehr

Visual C#.NET. Bearbeitet von Patrick A. Lorenz

Visual C#.NET. Bearbeitet von Patrick A. Lorenz Visual C#.NET Bearbeitet von Patrick A. Lorenz 1. Auflage 2002. Taschenbuch. 256 S. Paperback ISBN 978 3 446 22132 1 Format (B x L): 16,8 x 24,1 cm Gewicht: 640 g Zu Leseprobe schnell und portofrei erhältlich

Mehr

Verteilte Systeme. 2. Die Client-Server-Beziehung und daraus resultierende Techniken. 2.2 Nebenläufigkeitstechniken in Java

Verteilte Systeme. 2. Die Client-Server-Beziehung und daraus resultierende Techniken. 2.2 Nebenläufigkeitstechniken in Java VS22 Slide 1 Verteilte Systeme 2. Die Client-Server-Beziehung und daraus resultierende Techniken 2.2 Nebenläufigkeitstechniken in Java Sebastian Iwanowski FH Wedel VS22 Slide 2 Was ist Nebenläufigkeit?

Mehr

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter Kapitel 1 Der vierte Tag 1.1 Vererbung Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter Sprachen. Unter Vererbung versteht man die Möglichkeit, Eigenschaften vorhandener

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

Objektorientierte Programmierung Studiengang Medieninformatik

Objektorientierte Programmierung Studiengang Medieninformatik Objektorientierte Programmierung Studiengang Medieninformatik Hans-Werner Lang Hochschule Flensburg Vorlesung 5 12.04.2017 Was bisher geschah... Objektorientierte Programmierung Klassen und Objekte, Attribute

Mehr

Netzwerkprogrammierung unter Linux und UNIX

Netzwerkprogrammierung unter Linux und UNIX Netzwerkprogrammierung unter Linux und UNIX Bearbeitet von Stefan Fischer, Walter Müller 2. Auflage 1999. Buch. XII, 228 S. Hardcover ISBN 978 3 446 21093 6 Format (B x L): 14 x 20,9 cm Gewicht: 329 g

Mehr

Einführung in die Programmierung für Nebenfach Medieninformatik. Beat Rossmy, Michael Kirsch

Einführung in die Programmierung für Nebenfach Medieninformatik. Beat Rossmy, Michael Kirsch Einführung in die Programmierung für Nebenfach Medieninformatik Beat Rossmy, Michael Kirsch Direct Feedback - Socrative Eure Mitarbeit ist uns wichtig! Installiert euch dazu die kostenlose App Socrative

Mehr

Informatik B. Vorlesung 8 Synchronisierung von Threads. Dr. Ralf Kunze

Informatik B. Vorlesung 8 Synchronisierung von Threads. Dr. Ralf Kunze Vorlesung 8 Synchronisierung von Threads 1 Rückblick Threads Erzeugen, Starten und Stoppen Fehler abfangen Gemeinsamer Zugriff auf Ressourcen Kritische Blöcke (Einleitung) 2 Kritische Blöcke Kritische

Mehr

Bauaufsichtliche Zulassungen - Teil IV: Gewässerschutz (BAZ IV)

Bauaufsichtliche Zulassungen - Teil IV: Gewässerschutz (BAZ IV) Bauaufsichtliche Zulassungen - Teil IV: Gewässerschutz (BAZ IV) Amtliches Verzeichnis der allgemeinen bauaufsichtlichen Zulassungen für Bauprodukte und Bauarten nach Gegenstand und wesentlichem Inhalt

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 35 Einstieg in die Informatik mit Java Vererbung Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 35 1 Grundlagen 2 Verdeckte Variablen 3 Verdeckte Methoden 4 Konstruktoren

Mehr

Programmieren 2 Java Überblick

Programmieren 2 Java Überblick Programmieren 2 Java Überblick 1 Klassen und Objekte 2 Vererbung 4 Innere Klassen 5 Exceptions 6 Funktionsbibliothek 7 Datenstrukturen und Algorithmen 8 Ein-/Ausgabe 9 Graphische Benutzeroberflächen 10

Mehr

Verkettete Datenstrukturen: Listen

Verkettete Datenstrukturen: Listen Verkettete Datenstrukturen: Listen 2 Listen Formal: Liste = endliche Folge von Elementen [a 1, a 2,..., a n ]. Spezialfall: leere Liste [ ]. Länge einer Liste = Anzahl der Elemente (bei leerer Liste: 0).

Mehr

Nebenläufigkeit mit Java

Nebenläufigkeit mit Java Nebenläufigkeit mit Java Einheit 02: Eigenschaften & kritische Abläufe Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda Eigenschaften von Threads Name, Priorität, Zustand Zustandsübergänge

Mehr

Universität Augsburg, Institut für Informatik Sommersemester 2001 Prof. Dr. Martin Ester 08. Oktober Klausur II

Universität Augsburg, Institut für Informatik Sommersemester 2001 Prof. Dr. Martin Ester 08. Oktober Klausur II Universität Augsburg, Institut für Informatik Sommersemester 2001 Prof. Dr. Martin Ester 08. Oktober 2001 Stefan Holland Informatik II Hinweise: Klausur II Verwenden Sie für Ihre Lösungen ausschließlich

Mehr

Listing 1: Cowboy. Listing 2: Woody

Listing 1: Cowboy. Listing 2: Woody Musterlösung Test 3 Aufgabe 1: Cowboy Listing 1: Cowboy class Cowboy { public String rope ( Cowboy that ) { if ( this == that ) { return exclaim (); 5 else { return " Caught "; public String exclaim ()

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

Prüfung Softwareentwicklung II (IB)

Prüfung Softwareentwicklung II (IB) Hochschule für angewandte Wissenschaften München Fakultät für Informatik und Mathematik Studiengruppe IB 2 B, IB 2 C Sommersemester 2013 Prüfung Softwareentwicklung II (IB) Datum : 11.07.2013, 08:30 Uhr

Mehr

Parallele und funktionale Programmierung Wintersemester 2015/ Übung Abgabe bis , 10:00 Uhr

Parallele und funktionale Programmierung Wintersemester 2015/ Übung Abgabe bis , 10:00 Uhr 3. Übung Abgabe bis 10.11.2015, 10:00 Uhr Aufgabe 3.1: Java-Synchronisation a) An welchen Stellen im Code kann das Schlüsselwort synchronized verwendet werden? b) Wie nennt sich die Synchronisations-Art,

Mehr

Einführung in die Programmierung für Nebenfach Medieninformatik. Beat Rossmy, Michael Kirsch

Einführung in die Programmierung für Nebenfach Medieninformatik. Beat Rossmy, Michael Kirsch Einführung in die Programmierung für Nebenfach Medieninformatik Beat Rossmy, Michael Kirsch Direct Feedback - Socrative Eure Mitarbeit ist uns wichtig! Installiert euch dazu die kostenlose App Socrative

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 22 Einstieg in die Informatik mit Java Grundlagen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 22 1 Kommentare 2 Bezeichner für Klassen, Methoden, Variablen 3 White

Mehr

Einführung in die Informatik 1

Einführung in die Informatik 1 Einführung in die Informatik 1 Prof. Dr. Harald Räcke, R. Palenta, A. Reuss, S. Schulze Frielinghaus 21.02.2017 Klausur Vorname Nachname Matrikelnummer Unterschrift Füllen Sie die oben angegebenen Felder

Mehr

ÜBUNGS-BLOCK 8 AUFGABEN

ÜBUNGS-BLOCK 8 AUFGABEN ÜBUNGS-BLOCK 8 AUFGABEN Aufgabe 1: Gegeben sind drei Klassen (linke Spalte) sowie ein Programm (rechts): public class A { this.var = var; public int getvar() { return var; public class Programm { public

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

Ein erstes "Hello world!" Programm

Ein erstes Hello world! Programm OOP Henrik Horstmann 14. September 2014 Inhaltsverzeichnis Inhaltsverzeichnis 1 Bedeutung der Symbole...1 2 Die Benutzer Oberfläche von HOOPLU...2 2.1 Projekte öffnen und speichern...2 2.2 Die Klasse Program

Mehr

Physikalisch Technische Lehranstalt Wedel 31. Januar 2004 Prof. Dr. Uwe Schmidt

Physikalisch Technische Lehranstalt Wedel 31. Januar 2004 Prof. Dr. Uwe Schmidt Physikalisch Technische Lehranstalt Wedel 31. Januar 2004 Prof. Dr. Uwe Schmidt Aufgaben zur Klausur Objektorientierte Programmierung im WS 2003/04 (IA 252) Zeit: 90 Minuten erlaubte Hilfsmittel: keine

Mehr

Programmierung Nachklausurtutorium

Programmierung Nachklausurtutorium Programmierung Nachklausurtutorium Laryssa Horn, Tim Engelhardt 20 März 2018 Klassen Wofür wir Klassen brauchen: Definieren ein Bauplan eines Objektes Bauplan enthält Attribute und Methoden Klasse Beispiel

Mehr