
Parallele und verteilte Anwendungen in Java
Beschreibung
Weitere Details
Weitere Ausgaben
Person
ISNI: 0000 0000 1140 2081
Inhalt
- Intro
- Vorwort zur 6. Auflage
- Inhaltsverzeichnis
- 1 Einleitung
- 1.1 Parallelität, Nebenläufigkeit und Verteilung
- 1.2 Programme, Prozesse und Threads
- 2 Grundlegende Synchronisationskonzepte in Java
- 2.1 Erzeugung und Start von Java-Threads
- 2.1.1 Ableiten der Klasse Thread
- 2.1.2 Implementieren der Schnittstelle Runnable
- 2.1.3 Einige Beispiele
- 2.1.4 Parallele Abläufe
- 2.2 Probleme beim Zugriff auf gemeinsam genutzte Objekte
- 2.2.1 Erster Lösungsversuch
- 2.2.2 Zweiter Lösungsversuch
- 2.3 synchronized und volatile
- 2.3.1 Synchronized-Methoden
- 2.3.2 Synchronized-Blöcke
- 2.3.3 Wirkung von synchronized
- 2.3.4 Notwendigkeit von synchronized
- 2.3.5 volatile
- 2.3.6 Regel für die Nutzung von synchronized
- 2.4 Ende von Java-Threads
- 2.4.1 Asynchrone Beauftragung mit Abfragen der Ergebnisse
- 2.4.2 Zwangsweises Beenden von Threads
- 2.4.3 Asynchrone Beauftragung mit befristetem Warten
- 2.4.4 Asynchrone Beauftragung mit Rückruf (Callback)
- 2.4.5 Asynchrone Beauftragung mit Rekursion
- 2.5 wait und notify
- 2.5.1 Erster Lösungsversuch
- 2.5.2 Zweiter Lösungsversuch
- 2.5.3 Dritter Lösungsversuch
- 2.5.4 Korrekte und effiziente Lösung mit wait und notify
- 2.6 NotifyAll
- 2.6.1 Erzeuger-Verbraucher-Problem mit wait und notify
- 2.6.2 Erzeuger-Verbraucher-Problem mit wait und notifyAll
- 2.6.3 Faires Parkhaus mit wait und notifyAll
- 2.7 Prioritäten von Threads
- 2.8 Thread-Gruppen
- 2.9 Vordergrund- und Hintergrund-Threads
- 2.10 Weitere gute und schlechteThread-Methoden
- 2.11 Thread-lokale Daten
- 2.12 Zusammenfassung
- 3 Fortgeschrittene Synchronisationskonzepte in Java
- 3.1 Semaphore
- 3.1.1 Einfache Semaphore
- 3.1.2 Einfache Semaphore für den gegenseitigen Ausschluss
- 3.1.3 Einfache Semaphore zur Herstellung vorgegebener Ausführungsreihenfolgen
- 3.1.4 Additive Semaphore
- 3.1.5 Semaphorgruppen
- 3.2 Message Queues
- 3.2.1 Verallgemeinerung des Erzeuger-Verbraucher-Problems
- 3.2.2 Übertragung des erweiterten Erzeuger-Verbraucher-Problems auf Message Queues
- 3.3 Pipes
- 3.4 Philosophen-Problem
- 3.4.1 Lösung mit synchronized - wait - notifyAll
- 3.4.2 Naive Lösung mit einfachen Semaphoren
- 3.4.3 Einschränkende Lösung mit gegenseitigem Ausschluss
- 3.4.4 Gute Lösung mit einfachen Semaphoren
- 3.4.5 Lösung mit Semaphorgruppen
- 3.5 Leser-Schreiber-Problem
- 3.5.1 Lösung mit synchronized - wait - notifyAll
- 3.5.2 Lösung mit additiven Semaphoren
- 3.6 Schablonen zur Nutzung der Synchronisationsprimitive und Konsistenzbetrachtungen
- 3.7 Concurrent-Klassenbibliothek aus Java 5
- 3.7.1 Executors
- 3.7.2 Locks und Conditions
- 3.7.3 Atomic-Klassen
- 3.7.4 Synchronisationsklassen
- 3.7.5 Queues
- 3.8 Das Fork-Join-Framework von Java 7
- 3.8.1 Grenzen von ThreadPoolExecutor
- 3.8.2 ForkJoinPool und RecursiveTask
- 3.8.3 Beispiel zur Nutzung des Fork-Join-Frameworks
- 3.9 Das Data-Streaming-Framework von Java 8
- 3.9.1 Einleitendes Beispiel
- 3.9.2 Sequenzielles Data-Streaming
- 3.9.3 Paralleles Data-Streaming
- 3.10 Die CompletableFutures von Java 8
- 3.11 Ursachen für Verklemmungen
- 3.11.1 Beispiele für Verklemmungen mit synchronized
- 3.11.2 Beispiele für Verklemmungen mit Semaphoren
- 3.11.3 Bedingungen für das Eintreten von Verklemmungen
- 3.12 Vermeidung von Verklemmungen
- 3.12.1 Anforderung von Betriebsmitteln auf einen Schlag
- 3.12.2 Anforderung von Betriebsmitteln gemäß einer vorgegebenen Ordnung
- 3.12.3 Weitere Verfahren
- 3.13 Zusammenfassung
- 4 Parallelität und grafische Benutzeroberflächen
- 4.1 Einführung in die Programmierung grafischer Benutzeroberflächen mit JavaFX
- 4.1.1 Allgemeines zu grafischen Benutzeroberflächen
- 4.1.2 Erstes JavaFX-Beispiel
- 4.1.3 Ereignisbehandlung
- 4.2 Properties, Bindings und JavaFX-Collections
- 4.2.1 Properties
- 4.2.2 Bindings
- 4.2.3 JavaFX-Collections
- 4.3 Elemente von JavaFX
- 4.3.1 Container
- 4.3.2 Interaktionselemente
- 4.3.3 Grafikprogrammierung
- 4.3.4 Weitere Funktionen von JavaFX
- 4.4 MVP
- 4.4.1 Prinzip von MVP
- 4.4.2 Beispiel zu MVP
- 4.5 Threads und JavaFX
- 4.5.1 Threads für JavaFX
- 4.5.2 Länger dauernde Ereignisbehandlungen
- 4.5.3 Beispiel Stoppuhr
- 4.5.4 Tasks und Services in JavaFX
- 4.6 Zusammenfassung
- 5 Verteilte Anwendungen mit Sockets
- 5.1 Einführung in das Themengebiet der Rechnernetze
- 5.1.1 Schichtenmodell
- 5.1.2 IP-Adressen und DNS-Namen
- 5.1.3 Das Transportprotokoll UDP
- 5.1.4 Das Transportprotokoll TCP
- 5.2 Socket-Schnittstelle
- 5.2.1 Socket-Schnittstelle zu UDP
- 5.2.2 Socket-Schnittstelle zu TCP
- 5.2.3 Socket-Schnittstelle für Java
- 5.3 Kommunikation über UDP mit JavaSockets
- 5.4 Multicast-Kommunikation mit JavaSockets
- 5.5 Kommunikation über TCP mit JavaSockets
- 5.6 Sequenzielle und parallele Server
- 5.6.1 TCP-Server mit dynamischer Parallelität
- 5.6.2 TCP-Server mit statischer Parallelität
- 5.6.3 Sequenzieller, verzahnt arbeitender TCP-Server
- 5.6.4 Horizontale Skalierung mit Lastbalancierung
- 5.7 Verschlüsselte Kommunikation über TLS
- 5.8 Zusammenfassung
- 6 Verteilte Anwendungen mit RMI
- 6.1 Prinzip von RMI
- 6.2 Einführendes RMI-Beispiel
- 6.2.1 Basisprogramm
- 6.2.2 RMI-Client mit grafischer Benutzeroberfläche
- 6.2.3 RMI-Registry
- 6.3 Parallelität bei RMI-Methodenaufrufen
- 6.4 Wertübergabe für Parameter und Rückgabewerte
- 6.4.1 Serialisierung und Deserialisierung von Objekten
- 6.4.2 Serialisierung und Deserialisierung bei RMI
- 6.5 Referenzübergabe für Parameter und Rückgabewerte
- 6.6 Transformation lokaler in verteilte Anwendungen
- 6.6.1 Rechnergrenzen überschreitende Synchronisation mit RMI
- 6.6.2 Asynchrone Kommunikation mit RMI
- 6.6.3 Verteilte MVP-Anwendungen mit RMI
- 6.7 Dynamisches Umschalten zwischen Wert- und Referenzübergabe Migration von Objekten
- 6.7.1 Das Exportieren und Unexportieren von Objekten
- 6.7.2 Migration von Objekten
- 6.7.3 Eintrag eines Nicht-Stub-Objekts in die RMI-Registry
- 6.8 Realisierung von Stubs und Skeletons
- 6.8.1 Realisierung von Skeletons
- 6.8.2 Realisierung von Stubs
- 6.9 Verschiedenes
- 6.10 Zusammenfassung
- 7 Verteilte Anwendungenmit indirekter Kommunikation
- 7.1 Prinzip der indirekten Kommunikation
- 7.2 Kommunikationsmodelle
- 7.2.1 Kommunikationsmodell Queue
- 7.2.2 Kommunikationsmodell Topic
- 7.3 Nutzung der indirekten Kommunikation in Java
- 7.4 Unidirektionale Kommunikation
- 7.5 Bidirektionale Kommunikation mithilfe eines Rückkanals
- 7.6 Empfangsbestätigungen
- 7.7 Transaktionen
- 7.8 Verschiedenes
- 8 Webbasierte Anwendungen mit Servlets und JSF
- 8.1 HTTP und HTML
- 8.1.1 GET
- 8.1.2 Formulare in HTML
- 8.1.3 POST
- 8.1.4 Format von HTTP-Anfragen und -Antworten
- 8.2 Einführende Servlet-Beispiele
- 8.2.1 Allgemeine Vorgehensweise
- 8.2.2 Erstes Servlet-Beispiel
- 8.2.3 Zugriff auf Formulardaten
- 8.2.4 Zugriff auf die Daten der HTTP-Anfrage und -Antwort
- 8.3 Parallelität bei Servlets
- 8.3.1 Demonstration der Parallelität von Servlets
- 8.3.2 Paralleler Zugriff auf Daten
- 8.3.3 Anwendungsglobale Daten
- 8.4 Sessions und Cookies
- 8.4.1 Sessions
- 8.4.2 Realisierung von Sessions mit Cookies
- 8.4.3 Direkter Zugriff auf Cookies
- 8.4.4 Servlets mit länger dauernden Aufträgen
- 8.5 Asynchrone Servlets
- 8.6 Filter
- 8.7 Übertragung von Dateien mit Servlets
- 8.7.1 Herunterladen von Dateien
- 8.7.2 Hochladen von Dateien
- 8.8 JSF (Java Server Faces)
- 8.8.1 Einführendes Beispiel
- 8.8.2 Managed Beans und deren Scopes
- 8.8.3 MVP-Prinzip mit JSF
- 8.8.4 AJAX mit JSF
- 8.9 RESTful WebServices
- 8.9.1 Definition von RESTful WebServices
- 8.9.2 JSON
- 8.9.3 Beispiel
- 8.10 WebSockets
- 8.11 Zusammenfassung
- 9 Verteilte Anwendungen in der Cloud
- 9.1 Cloud Computing
- 9.2 AWS (Amazon Web Services)
- 9.2.1 AWS-Infrastruktur
- 9.2.2 AWS-Dienste
- 9.2.3 Nutzung der AWS-Dienste
- 9.3 Nutzung der AWS-Dienste von außerhalb der Cloud
- 9.3.1 Nutzung des AWS-Dienstes S3
- 9.3.2 Nutzung des AWS-Dienstes DynamoDB
- 9.3.3 Nutzung des AWS-Dienstes Translate
- 9.4 Nutzung von EC2 als Server
- 9.5 Nutzung von ECS als Server
- 9.5.1 Isolationsstufen
- 9.5.2 Linux-Grundlagen für die Realisierung von Containern
- 9.5.3 Docker
- 9.5.4 ECS
- 9.6 Nutzung von Lambda als Server
- 9.6.1 Idee der zu entwickelnden Anwendung
- 9.6.2 Lambda-Funktion
- 9.6.3 API Gateway
- 9.6.4 Kommandozeilenbasierter Client
- 9.6.5 Java-basierter Client mit grafischer Benutzeroberfläche
- Literatur
- Index
Systemvoraussetzungen
Dateiformat: PDF
Kopierschutz: Wasserzeichen-DRM (Digital Rights Management)
Systemvoraussetzungen:
- Computer (Windows; MacOS X; Linux): Verwenden Sie zum Lesen die kostenlose Software Adobe Reader, Adobe Digital Editions oder einen anderen PDF-Viewer Ihrer Wahl (siehe E-Book Hilfe).
- Tablet/Smartphone (Android; iOS): Installieren Sie bereits vor dem Download die kostenlose App Adobe Digital Editions oder die App PocketBook (siehe E-Book Hilfe).
- E-Book-Reader: Bookeen, Kobo, Pocketbook, Sony, Tolino u.v.a.m.
Das Dateiformat PDF zeigt auf jeder Hardware eine Buchseite stets identisch an. Daher ist eine PDF auch für ein komplexes Layout geeignet, wie es bei Lehr- und Fachbüchern verwendet wird (Bilder, Tabellen, Spalten, Fußnoten). Bei kleinen Displays von E-Readern oder Smartphones sind PDF leider eher nervig, weil zu viel Scrollen notwendig ist. Mit Wasserzeichen-DRM wird hier ein „weicher” Kopierschutz verwendet. Daher ist technisch zwar alles möglich – sogar eine unzulässige Weitergabe. Aber an sichtbaren und unsichtbaren Stellen wird der Käufer des E-Books als Wasserzeichen hinterlegt, sodass im Falle eines Missbrauchs die Spur zurückverfolgt werden kann.
Weitere Informationen finden Sie in unserer E-Book Hilfe.