236 6 Fortgeschrittene Java-Konzepte für Nebenläufigkeit ***
|
|
- Adolph Sommer
- vor 7 Jahren
- Abrufe
Transkript
1 236 6 Fortgeschrittene Java-Konzepte für Nebenläufigkeit *** Der Aufzählungstyp ThreadState Ab der Java-Version 5 sind die möglichen Zustände eines thread in dem Aufzählungstyp ThreadState definiert (siehe Abb ). Durch den Aufruf der getstate()-operation kann für ein Thread-Objekt ermittelt werden, in welchem Zustand sich ein thread gerade befindet. «enumeration» ThreadState NEW RUNNABLE BLOCKED WAITING TIMED_WAITING TERMINATED Abb : Mit der Version 5 erhält der Aufzählungstyp ThreadState Einzug in das Java-API. Damit lässt sich der aktuelle Zustand eines thread bequem abfragen Caches & Synchronisation *** In Java hat jeder thread einen lokalen Speicher, in dem er Anweisungen ausführt und Variablen ablegt. Der lokale Speicher wird regelmäßig, aber nicht atomar mit dem Hauptspeicher synchronisiert. Der lokale Speicher bildet die Cache-Architekturen moderner Prozessoren ab. Aufgrund der Caches müssen Zugriffe auf Variablen immer oder nie synchronisiert werden. Es reicht nicht aus, nur die schreibenden Zugriffe zu synchronisieren. Initialisierung bei Bedarf Beispiel: Rechtschreib- Prüfung In bestimmten Situationen ist es sinnvoll, ein Objekt nicht sofort bei der Erzeugung zu initialisieren, sondern so lange zu warten, bis es tatsächlich erforderlich ist. Dies ist immer dann der Fall, wenn die Initialisierung sehr zeit- oder speicheraufwändig ist und die zu initialisierenden Strukturen nicht in jedem Fall benötigt werden. Ein gutes Beispiel ist die Rechtschreib-Prüfung einer Textverarbeitung. Sie wird nur dann benötigt, wenn der Benut-
2 6.4 Java-Threads im Details *** 237 zer sie explizit anstößt, was nicht zwangsläufig bei jeder Ausführung der Anwendung der Fall sein muss. Für die Nutzung der Rechtschreib-Prüfung muss eine Wortliste von der Festplatte geladen werden. Dieser recht zeitaufwändige Vorgang sollte nur dann durchgeführt werden, wenn wirklich ein Text korrigiert werden soll. Wenn die Wortliste allerdings einmal benötigt wird, wird sie mit hoher Wahrscheinlichkeit viele Male hintereinander benutzt, da ein ganzer Text Wort für Wort zu überprüfen ist. Diese Prüfungen können problemlos parallel von mehreren threads durchgeführt werden, da auf die Wortliste nur lesend zugegriffen wird. Eine Implementierung der Rechtschreib-Prüfung könnte wie folgt aussehen Nutzung nie oder sehr häufig public class Rechtschreib-Prüfung public static HashSet wortliste = null; public boolean test( String testwort ) //wenn dies der erste Aufruf von test() ist, //muss das wörterbuch geladen werden if(wortliste == null ) //Wörterbuch wurde noch nicht geladen synchronized( this ) //noch einmal prüfen if( wortliste == null ) HashSet temp = new HashSet(); //lade Wörter in die Liste wortliste = temp; //Jetzt ist das Wörterbuch auf jeden Fall //im Speicher return wortliste.contains( testwort ); Diese Art der Implementierung wird Doppeltest-Prinzip (double test idiom) genannt. Doppeltest- Prinzip
3 238 6 Fortgeschrittene Java-Konzepte für Nebenläufigkeit *** Ein ausführender thread prüft, ob die Wortliste geladen wurde. Wenn ja, benutzt er sie ohne Synchronisation. Falls nicht, wird das Objekt gesperrt. Anschließend wiederholt der thread die Prüfung noch einmal, da ein anderer thread die Liste inzwischen geladen haben könnte. Falls nicht, wird die Liste geladen. Die HashMap wird zunächst über eine lokale Variable referenziert. Erst nach Abschluss des Ladevorgangs wird die geladene Wortliste dem Attribut zugewiesen und steht so anderen threads zur Verfügung. Referenz-Zuweisungen sind gemäß der Java-Sprachspezifikation atomar. Wenn die Abfrage innerhalb des synchronized-blocks nicht wiederholt würde, könnte es zu einer Wettkampfbedingung kommen, bei der die Wortliste zweimal geladen wird. Überlegen Sie sich eine solche Situation. Die Implementierung mit Hilfe des Doppeltest-Prinzips ist sehr effizient, hat aber einen Nachteil: sie ist nicht thread-safe. Der Grund für diesen»schönheitsfehler«ist nicht offensichtlich, sondern verbirgt sich in der Sprachspezifikation von Java. thread-lokaler Speicher Gemäß der Java-Sprachspezifikation hat jeder thread einen lokalen Speicher, in dem er alle lesenden und schreibenden Zugriffe auf Daten ausführt: Beim Lesen eines Wertes wird dieser vom zentralen Arbeitsspeicher in den thread-lokalen Speicher geladen und von dort gelesen. Beim Schreiben eines Wertes wird dieser erst in den thread-lokalen Speicher geschrieben und erst später in den zentralen Arbeitsspeicher übertragen, wo er für andere threads sichtbar ist. Ein Zeitpunkt für diesen Übertrag ist das Verlassen eines synchronized-blocks durch den thread. Die Sperre des Objekts wird dann erst nach vollständiger Übertragung der Daten wieder freigegeben.
4 6.4 Java-Threads im Details *** 239 Der thread-lokale Speicher wird sowohl für den Stapel, als auch für die Halde genutzt. Der Stapel ist dabei unkritisch, da ein thread nie auf den Stapel eines anderen zugreift. Im Falle der Rechtschreib-Prüfung kann folgende Situation eintreten: Ein thread hat die Wortliste geladen und das Attribut wortliste auf das gerade initialisierte HashSet-Objekt gesetzt. Die Zuweisung fand im thread-lokalen Speicher statt. Beim Verlassen des synchronized-blocks werden die Daten aus dem thread-lokalen Speicher in den zentralen Arbeitsspeicher zurückgeschrieben. Neben der Änderung des Attributs wortliste muss auch die gesamte Wortliste übertragen werden. Sie befindet sich zunächst ja auch im thread-lokalen Speicher. Die Übertragung dieser relativ großen Datenmenge erfolgt nicht atomar. Es ist auch nicht definiert, ob zuerst das HashSet-Objekt übertragen und dann das Attribut gesetzt wird, oder das Attribut irgendwann vorher oder zwischendurch aktualisiert wird. Wenn das Attribut aktualisiert wurde, das HashSet-Objekt aber noch nicht vollständig übertragen wurde, könnte ein anderer thread das HashSet-Objekt bereits nutzen. Diese befindet sich dann aber in einem völlig undefinierten Zustand. lokaler Speicher für Stapel und Halde Beispiel: undefinierte Wortliste Um diese Art von Wettkampfbedingungen zu vermeiden, sollte wenn möglich die folgende Regel befolgt werden: vollständig synchronisieren Alles oder nichts synchronisieren Es werden stets entweder alle Zugriffe auf eine Variable synchronisiert werden oder gar keine. Es reicht nicht aus, ausschließlich die schreibenden Zugriffe zu synchronisieren. Eine Ausnahme von dieser Regel sollte nur dann gemacht werden, wenn es sich um eine einzige Variable eines elementaren Datentyps handelt. Tipp
5 240 6 Fortgeschrittene Java-Konzepte für Nebenläufigkeit *** Man könnte nun auf die Idee kommen, eine boolesche Va- riable einzuführen, mit deren Hilfe geprüft werden kann, ob die Wortliste bereits geladen wurde. Dadurch wird die Abfrage if( wortliste == null ) zwar vermieden, die Problematik bleibt jedoch unverändert. keine Flags verwenden WRONG WAY Schreiben Sie die Rechtschreibkorrektur mit einer booleschen Variablen zur Prüfung, ob die Wortliste bereits geladen wurde. Machen Sie sich dann klar, dass es immer noch zu einer Wettkampfbedingung durch den thread-lokalen Speicher kommen kann. Beispiel: Rechtschreib- Prüfung korrekt synchronisiert Eine korrekt synchronisierte Implementierung der Rechtschreibkorrektur sieht wie folgt aus: public class Rechtschreib-Prüfung public static HashSet wortliste = null; public boolean test( String testwort ) //wenn dies der erste Aufruf von test() ist, //muss das wörterbuch geladen werden synchronized( this ) //Wörterbuch wurde noch nicht geladen if( wortliste == null ) HashSet temp = new HashSet(); //lade Wörter in die Liste wortliste = temp; //Jetzt ist das Wörterbuch auf jeden Fall //im Speicher return wortliste.contains( testwort ); Performance der neuen Implementierung Die neue Implementierung ist nicht vollständig nebenläufig. Es kann immer nur ein thread abfragen, ob die Wortliste geladen wurde. Da dies bei allen außer bei der ersten Abfrage der Fall ist, bedeutet dies in den meisten Fällen eine unnötige Synchronisation. Allerdings verbringt jeder thread nur einen kurzen Moment innerhalb des synchronized-blocks. Es
6 6.4 Java-Threads im Details *** 241 wird nur eine if-abfrage durchgeführt. Die wesentlich aufwändigere Suche des Testwortes in der Wortliste kann hingegen nebenläufig durchgeführt werden. Sollte die korrekt synchronisierte Version wirklich zu langsam sein, kann das Doppeltest-Prinzip verwendet werden. Allerdings muss der lokale Speicher des thread dabei berücksichtigt werden. Die folgende Variante ist schwer zu verstehen. Sie sollte nur eingesetzt werden, wenn das Doppeltest-Prinzip aus Geschwindigkeitsgründen wirklich notwendig ist. public class Rechtschreib-Prüfung public static HashSet wortliste = null; private static Object sperre = new Object(); nebenläufige Variante Beispiel: korrekt implementiertes Doppeltest-Prinzip public boolean test( String testwort ) //wenn dies der erste Aufruf von test() ist, //muss das wörterbuch geladen werden if(wortliste == null ) //Wörterbuch wurde noch nicht geladen synchronized( this ) //noch einmal prüfen if( wortliste == null ) HashSet temp = null; synchronized( sperre ) temp = new HashSet(); //lade Wörter nach temp //hier wird das Objekt, auf das temp zeigt aus dem //lokalen Speicher in den Hauptspeicher übertragen //die folgende Anweisung ist eine atomare Zuweisung wortliste = temp; //hier braucht nichts mehr aus dem //lokalen Speicher übertragen zu werden //Jetzt ist das Wörterbuch auf jeden Fall im Speicher return wortliste.contains( testwort );
7 242 6 Fortgeschrittene Java-Konzepte für Nebenläufigkeit *** Thread-lokaler Speicher und Caches Welche Gründe hatten die Entwickler von Java, dieses Verhalten in der Spezifikation zu manifestieren? Der Grund ist eine wesentlich bessere Performance einer Java-Anwendung. verschiedene Geschwindigkeiten Cache-Speicher Moderne Prozessoren arbeiten wesentlich schneller als alle anderen System-Komponenten. Wenn für eine Berechnung Daten aus dem Arbeitsspeicher geholt werden müssen, vergeht aus Sicht des Prozessors eine lange Zeit zwischen Anforderung und Lieferung. Es ist zwar möglich, schnelleren Speicher zu bauen, allerdings würde ein System dadurch wesentlich teurer werden. Heutige PCs oder Workstations haben mehrere Cache-Ebenen zwischen Arbeitsspeicher und Prozessor. Der Prozessor greift nicht direkt auf den Arbeitsspeicher zu, sondern auf einen Cache-Speicher, den 1st Level- oderl1-cache (siehe Abb ). Der L1-Cache ist schneller aber auch kleiner als der Arbeitsspeicher. Ausgeklügelte Vorhersage-Verfahren sorgen dafür, dass die vom Prozessor benötigten Daten meistens im Cache liegen und nicht erst aus dem Arbeitsspeicher geladen werden müssen. Der 2nd Level- oder L2-Cache zwischen L1-Cache und Arbeitspeicher ist größer und langsamer als der L1-Cache, aber kleiner und schneller als der Arbeitsspeicher. Einige Systeme haben noch einen L3-Cache. Prozessor L1-Cache L2-Cache L3-Cache Arbeitsspeicher Abb : Zur Beschleunigung von Speicherzugriffen liegen zwischen Prozessor und Arbeitsspeicher mehrere Ebenen von Cache-Speichern. Entkopplung von Prozessoren Bei Mehrprozessor-Systemen können die einzelnen Cache- Ebenen von mehreren Prozessoren gemeinsam genutzt oder
8 6.4 Java-Threads im Details *** 243 für jeden Prozessor einzeln ausgelegt sein (siehe Abb ). Hier sind im Prinzip beliebige Kombinationen denkbar. Man sagt z.b., zwei Prozessoren sind auf der L1-Cache- Ebene entkoppelt, wenn jeder seinen eigenen L1-Cache hat, sie sich aber den L2-Cache teilen. Hat jeder Prozessor seinen eigenen Cache, wird klar, warum jeder thread einen lokalen Speicher, nämlich den Cache haben muss. Ohne die Möglichkeit, die Daten eines thread in einem Cache zwischenspeichern zu können, müssten alle Lese- und Schreibzugriffe des Prozessors den Cache umgehen und direkt auf dem Arbeitsspeicher arbeiten. Die Verarbeitungsgeschwindigkeit würde dramatisch sinken. Prozessor 1 Prozessor 2 L1-Cache L1-Cache L2-Cache Arbeitsspeicher Abb : In dem gezeichten System hat jeder Prozessor einen L1-Cache. Sie nutzen den L2-Cache aber gemeinsam. Natürlich muss es nicht zwangsläufig thread-lokalen Speicher in einem System geben. Auf einer Einprozessor-Maschine ist dies wahrscheinlich nicht der Fall. Ein Grundsatz für die nebenläufige Programmierung in Java ist aber, dass keine Annahmen über die Anzahl der physischen Prozessoren oder die Umschaltung zwischen threads gemacht werden sollten. Der thread-lokale Speicher fällt in die gleiche Kategorie. Da die Sprachspezifikation ihn vorsieht, sollten Programme so geschrieben werden, dass sie damit zurecht kommen. für threadlokalen Speicher programmieren Sicherung von run() gegen versehentlichen Aufruf *** Die run()-operation eines thread ist öffentlich. Daher kann sie versehentlich statt der start()-operation auf-
Tag 8 Repetitorium Informatik (Java)
Tag 8 Repetitorium Informatik (Java) Dozent: Michael Baer Lehrstuhl für Informatik 2 (Programmiersysteme) Friedrich-Alexander-Universität Erlangen-Nürnberg Wintersemester 2017/2018 Informatik-Repetitorium
MehrAusnahmebehandlung 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
MehrObjektorientierte 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
MehrLaborskript 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,
MehrObjekte. Theorieteil. Inhaltsverzeichnis. Begriffe. Programmieren mit Java Modul 5. 1 Modulübersicht 3
Programmieren mit Java Modul 5 Objekte Theorieteil Inhaltsverzeichnis 1 Modulübersicht 3 2 Klassen und Objekte 3 2.1 Klassen.................................... 4 2.2 Objektvariablen und Methoden.......................
MehrObjektorientierte 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
MehrJavaprogrammierung mit NetBeans. Variablen, Datentypen, Methoden
Javaprogrammierung mit NetBeans Variablen, Datentypen, Methoden Programmieren 2 Java Bezeichner Bezeichner: Buchstabe _ $ Buchstabe _ $ Ziffer Groß- und Kleinbuchstaben werden strikt unterschieden. Schlüsselwörter
MehrEINFÜ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
MehrMemory Models Frederik Zipp
Memory Models Frederik Zipp Seminar: Programmiersprachen für Parallele Programmierung (SS 2010) Fakultät für Informatik - IPD SNELTING LEHRSTUHL PROGRAMMIERPARADIGMEN 1
MehrSoftwaretechnik 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.
Mehrparallele 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
MehrOrganisatorisches. Folien (u.a.) gibt's auf der Lva-Homepage zum Download
Organisatorisches Folien (u.a.) gibt's auf der Lva-Homepage zum Download Diesen Mi erstes Tutorium (15-17) Ab nächster Woche montags 10-12 (jeweils im Computerraum) 17.10.2017 IT I - VO 3 1 Organisatorisches
MehrOrganisatorisches. Folien (u.a.) auf der Lva-Homepage Skriptum über MU Online
Organisatorisches Folien (u.a.) auf der Lva-Homepage Skriptum über MU Online Nächste Woche VO und UE am Dienstag, den 30.10.! UE im CR IL/IT Wissensüberprüfung am Zettel 25.10.2018 IT I - VO 3 1 Organisatorisches
MehrLebenszyklus 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
MehrFH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Referenzen. Referenzen
5 Objektorientierte Programmierung in Java Prof. Dr. Ing. André Stuhlsatz Referenzen Beispiel an der einfachen Klasse Walze: public class Walze { int id; public Walze(int id) { this.id = id; Verwenden
MehrÜ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)
Mehr12. 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
MehrDurch 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
MehrIT I: Heute. abstrakte Methoden und Klassen. Interfaces. Interfaces List, Set und Collection IT I - VO 7 1
IT I: Heute abstrakte Methoden und Klassen Interfaces Interfaces List, Set und Collection 22.11.2018 IT I - VO 7 1 Wissensüberprüfung Überschreiben von Methoden: Aufruf der Methode der Oberklasse ist oft
MehrKonstruktor. Grundlagen der Programmierung. Stephan Kleuker 90
Konstruktor Stephan Kleuker 90 Wie erstellt man Objekte mit den bisher erstellten Code kann man genau genommen nichts anfangen, da Klassen nur Rahmen sind zur Erzeugung eines Objektes muss es die Möglichkeit
MehrLö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
MehrII. Grundlagen der Programmierung. Beispiel: Merge Sort. Beispiel: Merge Sort (Forts. ) Beispiel: Merge Sort (Forts. )
Technische Informatik für Ingenieure (TIfI) WS 2006/2007, Vorlesung 9 II. Grundlagen der Programmierung Ekkart Kindler Funktionen und Prozeduren Rekursion Datenstrukturen Merge S ( split, s, merge ) Beispiel:
Mehr3.2 Datentypen und Methoden
Kap03.fm Seite 217 Dienstag, 7. September 2010 1:48 13 3.2 Datentypen und Methoden 217 3.2 Datentypen und Methoden Wie bei vielen höheren Programmiersprachen gibt es auch in Java einfache und strukturierte
MehrJava 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(),
MehrEINFÜ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
MehrBeispiel 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
MehrII.4.2 Abstrakte Klassen und Interfaces - 1 -
1. Unterklassen und Vererbung 2. Abstrakte Klassen und Interfaces 3. Modularität und Pakete 4. Ausnahmen (Exceptions) 5. Generische Datentypen 6. Collections II.4.2 Abstrakte Klassen und Interfaces - 1
MehrVerkettete 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).
MehrEinstieg in die Informatik mit Java
1 / 39 Einstieg in die Informatik mit Java Objektorientierte Programmierung und Klassen mit Instanzmethoden Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 39 1 Überblick:
MehrParallele 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:
MehrParallele 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,
MehrTheorie 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
MehrEinstieg in die Informatik mit Java
1 / 15 Einstieg in die Informatik mit Java Collections Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 15 1 Überblick Collections 2 Hierarchie von Collections 3 Verwendung
MehrTesten 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
MehrUniversität Karlsruhe (TH)
Universität Karlsruhe (TH) Forschungsuniversität gegründet 1825 Das Java-Speichermodell Prof. Dr. Walter F. Tichy Dr. Victor Pankratius Ali Jannesari Geschichte des Speichermodells Kapitel 17 der Java-Sprachdefinition
Mehr! 1. Unterklassen und Vererbung! 2. Abstrakte Klassen und Interfaces! 3. Modularität und Pakete. II.4.2 Abstrakte Klassen und Interfaces - 1 -
! 1. Unterklassen und Vererbung! 2. Abstrakte Klassen und Interfaces! 3. Modularität und Pakete II.4.2 Abstrakte Klassen und Interfaces - 1 - Ähnliche Programmteile public class Bruchelement { Bruch wert;
MehrWelche Informatik-Kenntnisse bringen Sie mit?
Welche Informatik-Kenntnisse bringen Sie mit? So gehen Sie vor! Lösen Sie die Aufgaben der Reihe nach von 1 bis 20, ohne das Lösungsblatt zur Hilfe zu nehmen. Der Schwierigkeitsgrad der Aufgaben nimmt
MehrVerkettete Listen. Implementierung von einfach verketteten Listen. Implementierung von doppelt verketteten Listen
Verkettete Listen Verwendung von Listen in Java Das Prinzip des Iterators Implementierung von einfach verketteten Listen Implementierung von doppelt verketteten Listen Informatik II: Objektorientierte
MehrEinführung in die Programmierung für NF MI. Übung 04
Einführung in die Programmierung für NF MI Übung 04 Inhalt Arrays Einführung in Objekte Einführung in die Programmierung für NF Übung 04 2 Arrays Arrays repräsentieren Reihungen von Objekten, z.b. Variablen
MehrArrays. Einleitung. Deklarieren einer Array Variablen
Arrays Einleitung bisher jede Variable einzeln deklariert: 12 3 14 12 32 32 3 32 5 3 double sum; int count; ÿ Sie können Zweck und Aufbau von Array-Datentypen erklären ÿ Sie können einen Array korrekt
MehrSoftwareentwicklung I (IB) Objekte. Prof. Dr. Oliver Braun. Fakultät für Informatik und Mathematik Hochschule München
Softwareentwicklung I (IB) Objekte Fakultät für Informatik und Mathematik Hochschule München Letzte Änderung: 18.03.2018 20:09 Inhaltsverzeichnis Neue Typen durch Klassen............................. 2
MehrUmsetzung einer Klassenkarte in einer Programmiersprache
Klassen in Java Umsetzung einer Klassenkarte in einer Programmiersprache Objektorientierte Programme bestehen (nur) aus Klassendefinitionen In Klassendefinitionen wird die Struktur der Objekte festgelegt,
MehrMartin 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
MehrSchlussendlich 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 -
MehrVorkurs 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
MehrThread-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
MehrKlassen mit Instanzmethoden
Klassen mit Instanzmethoden Gerd Bohlender Institut für Angewandte und Numerische Mathematik Vorlesung: Einstieg in die Informatik mit Java 3.12.07 G. Bohlender (IANM UNI Karlsruhe) OOP und Klassen 3.12.07
MehrNebenlä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
MehrEinfü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
Mehr7. Verkettete Strukturen: Listen
7. Verkettete Strukturen: Listen Java-Beispiele: IntList.java List.java Stack1.java Version: 4. Jan. 2016 Vergleich: Schwerpunkte Arrays verkettete Listen Listenarten Implementation: - Pascal (C, C++):
MehrSchwerpunkte. Verkettete Listen. Verkettete Listen: 7. Verkettete Strukturen: Listen. Überblick und Grundprinzip. Vergleich: Arrays verkettete Listen
Schwerpunkte 7. Verkettete Strukturen: Listen Java-Beispiele: IntList.java List.java Stack1.java Vergleich: Arrays verkettete Listen Listenarten Implementation: - Pascal (C, C++): über Datenstrukturen
MehrMartin Unold INFORMATIK. Geoinformatik und Vermessung
Wiederholung So sieht ein leeres Java-Programm aus public class Programmname { public static void main (String[] args) { // Hier stehen die Anweisungen Welche Arten von Anweisungen gibt es? Anweisungen
MehrProgrammieren 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
MehrProzesse. 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
MehrWintersemester 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
MehrFakultät IV Elektrotechnik/Informatik
Fakultät IV Elektrotechnik/Informatik Probeklausur Einführung in die Informatik I Hinweis: Diese Probeklausur ist eine kleine Aufgabensammlung, die etwa dem Schwierigkeitsgrad der Teilleistung TL 2 (Programmiertest)
MehrEinstieg in die Informatik mit Java
1 / 25 Einstieg in die Informatik mit Java Objektorientierte Programmierung und Klassen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 25 1 Die Philosophie 2 Definition
MehrGrundelemente objektorientierter Sprachen (1)
Grundelemente objektorientierter Sprachen (1) Objekt Repräsentation eines Objektes der realen Welt in der Terminologie objektorientierter Programmiersprachen besitzen Attribute (Eigenschaften), deren Werte
MehrObjektorientierung (OO)
Objektorientierung (OO) Objekte haben Zustände (oder Eigenschaften, Attribute) und Verhalten Zustände: Objektvariablen (in Java auch fields) Verhalten (oder Aktionen): Methoden (methods, Funktionen) members
MehrSynchronisation 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
MehrVerschlüsseln eines Bildes. Visuelle Kryptographie. Verschlüsseln eines Bildes. Verschlüsseln eines Bildes
Verschlüsseln eines Bildes Visuelle Kryptographie Anwendung von Zufallszahlen Wir wollen ein Bild an Alice und Bob schicken, so dass Alice allein keine Information über das Bild bekommt Bob allein keine
MehrInstitut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke
Java 2 Markus Reschke 07.10.2014 Datentypen Was wird gespeichert? Wie wird es gespeichert? Was kann man mit Werten eines Datentyps machen (Operationen, Methoden)? Welche Werte gehören zum Datentyp? Wie
MehrC++ - Objektorientierte Programmierung Konstante und statische Elemente
C++ - Objektorientierte Programmierung Konstante und statische Elemente hat eine Kantenlänge hat eine Füllfarbe Kantenlänge setzen Füllfarbe lesen Volumen berechnen Leibniz Universität IT Services Anja
MehrProbeklausur Java Einführung in die Informatik. Wintersemester 2016/2017
Fakultät IV NI & CV Java Einführung in die Informatik Wintersemester 2016/2017 Hinweis: Diese ist eine kleine Aufgabensammlung, die etwa dem Schwierigkeitsgrad der schriftlichen Prüfung des Moduls Einführung
MehrObjektorientierte Programmierung und Klassen
Objektorientierte Programmierung und Klassen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Vorlesung: Einstieg in die Informatik mit Java 16.5.07 G. Bohlender (IANM UNI Karlsruhe) OOP
MehrEinführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1. Kapitel 11. Listen. Listen
Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1 Kapitel 11 Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 2 Ziele Implementierungen für
MehrSoftware Entwicklung 1
Software Entwicklung 1 Annette Bieniusa Peter Zeller AG Softech FB Informatik TU Kaiserslautern Speichermanagement Wie viel Speicher braucht ein Programm? Wofür wird Speicher benötigt? Wie ist der Speicher
MehrGrundelemente objektorientierter Sprachen (1)
Grundelemente objektorientierter Sprachen (1) Objekt Repräsentation eines Objektes der realen Welt in der Terminologie objektorientierter Programmiersprachen besitzen Attribute (Eigenschaften), deren Werte
MehrBetriebssysteme. Wintersemester 2015. Kapitel 2 Prozess und Threads. Patrick Kendzo ppkendzo@gmail.com
Betriebssysteme Wintersemester 2015 Kapitel 2 Prozess und Threads Patrick Kendzo ppkendzo@gmail.com Programm Inhalt Einleitung Prozesse und Threads Speicherverwaltung Eingabe und Ausgabe Dateisysteme Zusammenfassung
MehrRepetitorium 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
MehrEinführung in die Systemprogrammierung
Einführung in die Systemprogrammierung Caches in der Praxis Prof. Dr. Christoph Reichenbach Fachbereich 12 / Institut für Informatik 17. Juli 2015 Cache-Architektur Mehrere Cache-Stufen, z.b.: Speicherplatz
MehrInstitut 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
MehrGrundelemente objektorientierter Sprachen (1)
Grundelemente objektorientierter Sprachen (1) Objekt Repräsentation eines Objektes der realen Welt in der Terminologie objektorientierter Programmiersprachen besitzen Attribute (Eigenschaften), deren Werte
MehrALP II Dynamische Datenmengen Datenabstraktion (Teil 2)
ALP II Dynamische Datenmengen Datenabstraktion (Teil 2) O1 O2 O3 O4 SS 2012 Prof. Dr. Margarita Esponda 49 Einfach verkettete Listen O1 O2 O3 50 Einführung Einfach verkettete Listen sind die einfachsten
MehrUnterrichtsmaterialien in digitaler und in gedruckter Form. Auszug aus: Modellierung und Implementierung von Datenstrukturen mit Java
Unterrichtsmaterialien in digitaler und in gedruckter Form Auszug aus: Modellierung und Implementierung von Datenstrukturen mit Java Das komplette Material finden Sie hier: Download bei School-Scout.de
MehrEinstieg in die Informatik mit Java
1 / 27 Einstieg in die Informatik mit Java Klassen als Datenstrukturen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 27 1 Überblick: Klassen als Datenstruktur 2 Vereinbarung
MehrProjekt Systementwicklung
Projekt Systementwicklung Effiziente Codierung: Laufzeitoptimierung Prof. Dr. Nikolaus Wulff Effiziente Codierung Der Wunsch effizienten Code zu schreiben entstammt mehreren Quellen: Zielplattformen mit
MehrProbeklausur Java Einführung in die Informatik. Wintersemester 2017/2018
Fakultät IV NI & CV Java Einführung in die Informatik Wintersemester 2017/2018 Hinweis: Diese ist eine kleine Aufgabensammlung, die etwa dem Schwierigkeitsgrad der schriftlichen Prüfung des Moduls Einführung
MehrAbschnitt 6: Klassen, Objekte und Methoden in Java
Abschnitt 6: Klassen, Objekte und Methoden in Java 6. Klassen, Objekte und Methoden in Java 6.1 Klassen 6.2 Objekte 6.3 Methoden 6.4 Zusammenfassung 6 Klassen, Objekte und Methoden in Java Informatik 2
MehrVariablen in Java. Martin Wirsing. in Zusammenarbeit mit Michael Barth, Philipp Meier und Gefei Zhang. Ziele
Variablen in Java Martin Wirsing in Zusammenarbeit mit Michael Barth, Philipp Meier und Gefei Zhang 11/04 2 Ziele Unterschiedliche Arten von Variablen in Java verstehen Bestimmen von Gültigkeitsbereich
MehrDynamische Datentypen. Destruktor, Copy-Konstruktor, Zuweisungsoperator, Dynamischer Datentyp, Vektoren
Dynamische Datentypen Destruktor, Copy-Konstruktor, Zuweisungsoperator, Dynamischer Datentyp, Vektoren Probleme mit Feldern (variabler Länge) man kann sie nicht direkt kopieren und zuweisen Probleme mit
MehrTag 7 Repetitorium Informatik (Java)
Tag 7 Repetitorium Informatik (Java) Dozent: Patrick Kreutzer Lehrstuhl für Informatik 2 (Programmiersysteme) Friedrich-Alexander-Universität Erlangen-Nürnberg Wintersemester 2017/2018 Informatik-Repetitorium
MehrJavakurs 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
MehrJavakurs 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
MehrNeben 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
MehrNebenläufige Programmierung I
Nebenläufige Programmierung I Martin Wirsing in Zusammenarbeit mit Matthias Hölzl, Piotr Kosiuczenko, Dirk Pattinson 07/03 Ziele 2 Grundlegende Begriffe der nebenläufigen Programmierung verstehen lernen
MehrVorkurs Informatik WiSe 16/17
Java Ausdrücke und Variablen Dr. Werner Struckmann / Stephan Mielke, Jakob Garbe, 05.10.2016 Technische Universität Braunschweig, IPS Überblick Ausdrücke, Datentypen und Variablen Kontrollstrukturen 05.10.2016
MehrObjektorientierte Programmierung
Objektorientierte Programmierung 1 Geschichte Dahl, Nygaard: Simula 67 (Algol 60 + Objektorientierung) Kay et al.: Smalltalk (erste rein-objektorientierte Sprache) Object Pascal, Objective C, C++ (wiederum
MehrObjektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types)
Stefan Brass: OOP (Java), 22. Aufzählungstypen 1/20 Objektorientierte Programmierung Kapitel 22: Aufzählungstypen (Enumeration Types) Stefan Brass Martin-Luther-Universität Halle-Wittenberg Wintersemester
MehrProf. Dr. Uwe Schmidt. 21.August Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (BInf 211, BTInf 211, BMInf 211, BWInf 211)
Prof. Dr. Uwe Schmidt 21.August 2007 Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (BInf 211, BTInf 211, BMInf 211, BWInf 211) Zeit: 75 Minuten erlaubte Hilfsmittel: keine Bitte tragen
MehrVersuchsziele Konzepte der parallelen Programmierung am Beispiel von Threads anwenden können. Einbau von Kontrollmechanismen mittels Semaphore.
Hochschule Harz Versuch: fcopy Mit Java FB Automatisierung und Informatik Betriebssysteme Thema: Kopieren einer Datei unter der Kontrolle von Semaphoren Versuchsziele Konzepte der parallelen Programmierung
MehrEinrichten einer neuen Bankverbindung für den VR-NetKey ab Version 5.xx
Einrichten einer neuen Bankverbindung für den VR-NetKey ab Version 5.xx Starten Sie die VR-NetWorld Software und wechseln Sie im linken Navigatorbaum Baumansicht Mandant (roter Kasten mit Pfeil) in die
MehrOOP: 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
MehrJavakurs für Anfänger
Javakurs für Anfänger Einheit 02: Klassen & Objekte Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda 1. Teil: Klassen Grundstruktur einer Java-Klasse Eigenschaften (Attribute) Variablen
MehrDas Ersetzbarkeitsprinzip
Das Ersetzbarkeitsprinzip U ist Untertyp von T, wenn eine Instanz von U überall verwendbar ist, wo eine Instanz von T erwartet wird Dieses Ersetzbarkeitsprinzip benötigt man für den Aufruf einer Routine
Mehr