Schulung Java-8
Mit Java 8 ist die Programmiersprache Java um zahlreiche Sprachmittel erweitert worden. Dazu gehören Lambda-Ausdrücke und Methoden-Referenzen, aber auch Default-Methoden in Interfaces. Die neuen Sprachmittel verändern den Stil, in dem Java-Entwickler programmieren, denn sie unterstützen Programmiertechniken, die bislang in Java nicht möglich waren. Die Lambdas und Methoden-Referenzen ermöglichen Techniken, wie sie aus der funktionalen Programmierung bekannt sind. Über Default-Methoden wird Mehrfachvererbung in Java unterstützt; damit werden Programmtechniken wie Traits und Mixins möglich.
Zusätzlich zur Sprache sind zentrale Abstraktionen des JDK wie die Collections umfangreich überarbeitet worden. Sie bieten seit Java 8 funktionale Schnittstellen für Zugriffe auf Elemente einer Collection über sogenannte Streams. Die Streams ermöglichen sowohl sequentiellen als auch hochperformanten parallelen Zugriff auf die Elemente einer Collection. Letzteres ist insbesondere für Applikationen auf Multicore- und Multi-CPU-Architekturen von Bedeutung, da es sehr bequem eine feingranulare Parallelisierung ermöglicht.
Die Benutzung der Streams ist ohne die neuen Sprachkonstrukte undenkbar. Performantes paralleles Programmieren ist ohne die Streams schwer vorstellbar. Dieses Seminar bietet Java-Programmierern die Möglichkeit, die Sprachneuerungen inkl. neuer Programmiertechniken zu erlernen, das umfangreiche Stream-API kennen zu lernen und das komplexe Performance-Modell der parallelen Streams zu verstehen.
Neben den Streams sind für Java 8 weitere JDK-Schnittstellen entstanden, die ebenfalls auf die neuen Lambdas aufbauen. Dazu gehört das CompletableFuture. Es ist eine Alternative zur herkömmlichen FutureTask und ermöglicht die asynchrone Reaktion auf Ergebnisse einer Task. Daneben gibt es weitere neue Concurrency Utilities in Java 8, die Low-Level-Optimierungen unterstützen (StampedLock, Akkumulatoren und @Contended).
Neu ist auch das Date/Time API, das mit seinen sauberen und eleganten Abstraktionen herkömmliche Klassen wie Date, Calendar, etc. ablöst.
Neue Sprachmittel in Java 8
Lambda-Ausdrücke
Methoden- und Konstruktor-Referenzen
Funktionale Interfaces und Typinferenz
Default- und statische Methoden in Interfaces
Laufzeitrepräsentation von Lambdas
Programmieren mit Lambdas
Stream-API
ForEach-Filter-Map-Reduce
Fluent Programming
flatMap() & Mapper
collect() & Collectoren
Stream Internals
Pipelining
Non-Interference-Anforderung
Operationen mit/ohne Zustand
Sequentielle und parallele Ausführung
Besonderheiten bei parallelen Streams
Performanceverhalten der Stream-Operationen
Concurrency Utilities
Completable Future
Stamped Lock
Accumulators
@Contended
Miscellaneous
Date/Time API
Type Annotations
Metaspace vs.PermGen