Java 7: Fork-Join-Framework und Phaser
By Angelika Langer and Klaus Kreft
()
About this ebook
Read more from Angelika Langer
shortcut Java Core Programmierung: Memory Model und Garbage Collection Rating: 0 out of 5 stars0 ratings
Related to Java 7
Titles in the series (100)
Java EE Security Rating: 0 out of 5 stars0 ratingsJavaScript für Eclipse-Entwickler: Orion, RAP und GWT Rating: 0 out of 5 stars0 ratingsSkalierbare Softwaresysteme: Design, Betrieb und Optimierungspotenziale Rating: 0 out of 5 stars0 ratingsHTML5 für Mobile Web Rating: 0 out of 5 stars0 ratingsErfolgreiche Spieleentwicklung: OpenGL, OpenAL und KI Rating: 0 out of 5 stars0 ratingsSharePoint-Entwicklung für Einsteiger Rating: 0 out of 5 stars0 ratingsNFC: Near Field Communication für Android-Entwickler Rating: 5 out of 5 stars5/5Geolocation mit PHP: Foursquare-API, Google Places & Qype Rating: 0 out of 5 stars0 ratingsApache Tapestry: Einstieg in die komponentenorientierte Webentwicklung Rating: 0 out of 5 stars0 ratingsHTML5 Security Rating: 0 out of 5 stars0 ratingsErfolgreiche Spieleentwicklung: OpenCL Rating: 0 out of 5 stars0 ratingsEinstieg in Google Go Rating: 0 out of 5 stars0 ratingsServiceorientierte Architektur: Anforderungen, Konzeption und Praxiserfahrungen Rating: 0 out of 5 stars0 ratingsTFS 2012 Anforderungsmanagement: Work Items und Prozessvorlagen Rating: 0 out of 5 stars0 ratingsAmazon Web Services für .NET Entwickler Rating: 0 out of 5 stars0 ratingsUX Design für Tablet-Websites: Ein Überblick Rating: 0 out of 5 stars0 ratingsM2M by Eclipse Rating: 0 out of 5 stars0 ratingsIT Wissensmanagement: Theorie und Praxis Rating: 0 out of 5 stars0 ratingsBig Data: Executive Briefing Rating: 0 out of 5 stars0 ratingsJavaScript auf dem Server Rating: 0 out of 5 stars0 ratingsAlgorithmen: Grundlagen und Implementierung Rating: 0 out of 5 stars0 ratingsTitanium Mobile: Multi Platform Apps mit JavaScript Rating: 0 out of 5 stars0 ratingsADF - Mobile Apps entwickeln und Swing ablösen: Mobile Apps entwickeln und Swing ablösen Rating: 0 out of 5 stars0 ratingsÜberzeugende Präsentationen: Konzeption, Technik und Design Rating: 0 out of 5 stars0 ratingsTFS 2012 Versionskontrolle: Grundlagen, Check-In Policies und Branch-Modelle Rating: 0 out of 5 stars0 ratingsNutzeraspekte in Suchmaschinen: Komponenten für eine gelungene Usability-Gestaltung Rating: 0 out of 5 stars0 ratingsJava 7: Fork-Join-Framework und Phaser Rating: 0 out of 5 stars0 ratingsBig Data: Technologiegrundlagen Rating: 0 out of 5 stars0 ratingsUser Experience Testing 3.0: Status Quo, Entwicklung und Trends Rating: 0 out of 5 stars0 ratingsZend Framework 2: Für Einsteiger und Umsteiger Rating: 0 out of 5 stars0 ratings
Related ebooks
Spock, Geb und Selenium: Testframeworks unter die Lupe genommen Rating: 0 out of 5 stars0 ratingsNebenläufigkeit in Java und C++ Rating: 0 out of 5 stars0 ratingsDas Java Memory Model: Überblick und Ausblick auf Java 9 Rating: 0 out of 5 stars0 ratingsJavaScript auf dem Server Rating: 0 out of 5 stars0 ratingsSpring Boot und Spring Cloud Rating: 5 out of 5 stars5/5JPA 2.1: Persistence-Features in Java EE 7 Rating: 0 out of 5 stars0 ratingsDynamic Proxies: Effizient programmieren Rating: 0 out of 5 stars0 ratingsJavaScript für Java-Entwickler Rating: 0 out of 5 stars0 ratingsJava FX - Status Quo: Status Quo Rating: 0 out of 5 stars0 ratingsMemory Leaks in Java Rating: 0 out of 5 stars0 ratingsEclipse meets Java FX Rating: 0 out of 5 stars0 ratingsCDI - Dependency Injection in Java EE 7: Dependency Injection in Java EE 7 Rating: 0 out of 5 stars0 ratingsJava 9 Streams Rating: 0 out of 5 stars0 ratingsJava EE 7: Ein Ausblick Rating: 0 out of 5 stars0 ratingsJava 9: Einführung in das Modulsystem und die Migration Rating: 0 out of 5 stars0 ratingsBig Data: Datenverarbeitung basierend auf MOM und SQL Rating: 0 out of 5 stars0 ratingsOpenLaszlo: schnell + kompakt Rating: 0 out of 5 stars0 ratingsJava 7: Project Coin, Generics und NIO2 Rating: 0 out of 5 stars0 ratingsApache Tamaya: Einstieg in die Konfiguration in Java Rating: 0 out of 5 stars0 ratingsJava EE 6: Enterprise-Anwendungsentwicklung leicht gemacht Rating: 0 out of 5 stars0 ratingsDas Vulkan-API: Teil 2: Wie man ein Framework erstellt und Shader programmiert Rating: 0 out of 5 stars0 ratingsPolyglottes Programmieren in Java Core Rating: 0 out of 5 stars0 ratingsModerne Webanwendungen mit AngularJS Rating: 0 out of 5 stars0 ratingsSprachenkompendium: Vala, Go und Rust Rating: 0 out of 5 stars0 ratingsApache Kafka Rating: 0 out of 5 stars0 ratingsArchitekturpatterns mit Python: Test-Driven Development, Domain-Driven Design und Event-Driven Microservices praktisch umgesetzt Rating: 0 out of 5 stars0 ratingsJavaScript und TypeScript für C#-Entwickler Rating: 0 out of 5 stars0 ratingsForms over Data mit Knockout.js: Die freie MVVM-JavaScript-Bibliothek im Praxiseinsatz Rating: 0 out of 5 stars0 ratingsSharePoint Kompendium - Bd. 16 Rating: 0 out of 5 stars0 ratingsJavaFX Rating: 0 out of 5 stars0 ratings
Programming For You
Algorithmen: Grundlagen und Implementierung Rating: 0 out of 5 stars0 ratingsPython kurz & gut: Für Python 3.x und 2.7 Rating: 3 out of 5 stars3/5Hacken mit Python und Kali-Linux: Entwicklung eigener Hackingtools mit Python unter Kali-Linux Rating: 0 out of 5 stars0 ratingsWeniger schlecht programmieren Rating: 4 out of 5 stars4/5Git kurz & gut Rating: 0 out of 5 stars0 ratingsEigene Spiele programmieren – Python lernen: Der spielerische Weg zur Programmiersprache Rating: 0 out of 5 stars0 ratingsProgrammieren für Einsteiger: Teil 1 Rating: 0 out of 5 stars0 ratingsSQL von Kopf bis Fuß Rating: 4 out of 5 stars4/5Raspberry Pi: Einstieg • Optimierung • Projekte Rating: 5 out of 5 stars5/5JavaScript kurz & gut Rating: 3 out of 5 stars3/5C++: Eine kompakte Einführung Rating: 0 out of 5 stars0 ratingsLinux Grundlagen - Ein Einstieg in das Linux-Betriebssystem Rating: 0 out of 5 stars0 ratingsMikrocontroller in der Elektronik: Mikrocontroller programmieren und in der Praxis einsetzen Rating: 0 out of 5 stars0 ratingsRaspberry Pi: Mach's einfach: Die kompakteste Gebrauchsanweisung mit 222 Anleitungen. Geeignet für Raspberry Pi 3 Modell B / B+ Rating: 0 out of 5 stars0 ratingsDas Franzis Starterpaket Arduino Uno: Das Handbuch für den Schnelleinstieg Rating: 0 out of 5 stars0 ratingsProgrammieren von Kopf bis Fuß Rating: 4 out of 5 stars4/5Vue.js kurz & gut Rating: 0 out of 5 stars0 ratingsPowerShell: Anwendung und effektive Nutzung Rating: 5 out of 5 stars5/5Python | Schritt für Schritt Programmieren lernen: Der ultimative Anfänger Guide für einen einfachen & schnellen Einstieg Rating: 0 out of 5 stars0 ratingsC von Kopf bis Fuß Rating: 3 out of 5 stars3/5Einstieg in TypeScript: Grundlagen für Entwickler Rating: 0 out of 5 stars0 ratingsAndroid-Entwicklung für Einsteiger - 20.000 Zeilen unter dem Meer: 2. erweiterte Auflage Rating: 0 out of 5 stars0 ratingsJavaScript kinderleicht!: Einfach programmieren lernen mit der Sprache des Web Rating: 0 out of 5 stars0 ratingsMicrocontroller für das IoT Rating: 0 out of 5 stars0 ratingsSoftwareentwicklungsprozess: Von der ersten Idee bis zur Installation Rating: 0 out of 5 stars0 ratingsJava 8 - Die Neuerungen: Lambdas, Streams, Date and Time API und JavaFX 8 im Überblick Rating: 0 out of 5 stars0 ratingsAndroid-Programmierung kurz & gut Rating: 0 out of 5 stars0 ratingsLinux Befehlsreferenz: Schnelleinstieg in die Arbeit mit der Konsole, regulären Ausdrücken und Shellscripting Rating: 0 out of 5 stars0 ratingsDas große Python3 Workbook: Mit vielen Beispielen und Übungen - Programmieren leicht gemacht! Rating: 4 out of 5 stars4/5Programmieren lernen mit Python 3: Schnelleinstieg für Beginner Rating: 0 out of 5 stars0 ratings
Reviews for Java 7
0 ratings0 reviews
Book preview
Java 7 - Angelika Langer
Angelika Langer, Klaus Kreft
Java 7
Fork-Join-Framework und Phaser
ISBN: 978-3-86802-427-2
© 2012 entwickler.press
Ein Imprint der Software & Support Media GmbH
1 JSR 166y – Fork-Join-Framework
Das Fork-Join-Framework ist Teil des JSR 166y. Entwickelt und zur Verfügung gestellt werden die Abstraktionen des JSR 166 traditionell von Doug Lea [1]. Der Original-JSR-166 ging in Java 5 ein, erste Ergänzungen als JSR 166x folgten in Java 6. In Java 7 sind nun weitere Ergänzungen als 166y gekommen.
Wir wollen uns in diesem ersten Kapitel das Design des Fork-Join-Framework zusammen mit einigen Implementierungsdetails genauer ansehen. Im nächsten Kapitel diskutieren wir ausgehend von einem Benutzungsbeispiel, welche Rolle das Fork-Join-Framework für einige Erweiterungen in Java 8 spielen wird und wie sich damit die Benutzung von Arrays und Collections in Java zukünftig verändern wird. Doch bevor wir mit dem Fork-Join-Framework beginnen, sollten wir zur Abgrenzung einen kurzen Blick auf den ThreadPoolExecutor werfen.
Der ThreadPoolExecutor
Der ThreadPoolExecutor ist der Standard-Thread-Pool, der in Java im Rahmen des JDK zur Verfügung steht. Er war Teil des JSR 166 und ist dementsprechend mit Java 5 Bestandteil des JDK geworden. Wir haben ihm damals einen ausführlichen Artikel gewidmet [2]. Für die Diskussion ist wichtig, dass alle Tasks, die man zur Ausführung an den Thread-Pool übergibt, voneinander unabhängig sein müssen. Sie dürfen zum Beispiel nicht im Ergebnis voneinander abhängig sein, in einer festgelegten Reihenfolge abgearbeitet werden müssen oder anderweitig miteinander korrelieren. Es ist nicht immer ganz einfach, hier die potenziellen Korrelationen zu erkennen. Wenn man zum Beispiel in einem Eventserver das Senden der Events an die Clients über einen ThreadPoolExecutor abwickelt, so scheint dieser Ansatz erst einmal unproblematisch zu sein – das ist er aber leider möglicherweise nicht. Das Problem ist, dass die Reihenfolge der Events für einen Client unter Umständen nicht eingehalten werden kann. D. h. es kann vorkommen, dass die Reihenfolge, in der die Events an einen Client versandt werden, nicht mehr der Reihenfolge entspricht, in der sie an den ThreadPoolExecutor übergeben wurden.
Wir haben also übersehen, dass die Reihenfolge der Events für einen Client eine Abhängigkeit darstellt, die der ThreadPoolExecutor nicht einhalten kann. Konkret kann dieses Reihenfolge-Problem zum Beispiel dadurch entstehen, dass zwei Events für den gleichen Client direkt hintereinander an den ThreadPoolExecutor übergeben werden. Jedem Event wird gleich ein Pool-Thread zugeordnet. Aufgrund des aktuellen Thread Schedulings wird aber der Thread für das erste Event angehalten, und dem Thread für das zweite Event wird die CPU zugeordnet. So wird dann das zweite Event vor dem ersten an den Client zugestellt. Lösen kann man das Problem dadurch, dass man nur jeweils ein Event pro Client