Angelika Langer - Training & Consulting
HOME | COURSES | TALKS | ARTICLES | GENERICS | LAMBDAS | IOSTREAMS | ABOUT | CONTACT | Twitter | Lanyrd | Linkedin
HOME 


  UPCOMING
  PREVIOUS
  MATERIALS
 
GENERICS 
LAMBDAS 
IOSTREAMS 
ABOUT 
CONTACT 
Java-Programmierung auf Multicore-Plattformen - wie Sprache, JDK und JVM die Parallelverarbeitung unterstützen

Java-Programmierung auf Multicore-Plattformen - wie Sprache, JDK und JVM die Parallelverarbeitung unterstützen  
ABSTRACT 
 
 
In diesem Tutorial geht es um das Java Memory Model und den Fork-Join-Pool (inkl. Ausblick auf  "filter/map/reduce for Java" in Java 8). 

Multicore-Prozessoren verwenden aufwendige Caching-Mechnismen, um ein gute Verarbeitsgeschwindigkeit zu erreichen.  Diese Caching-Verfahren haben dazu geführt, dass die Programmiersprachen ihre Anforderungen an die so-genannte "cache coherence" reduzieren mussten, d.h. es ist keineswegs garantiert, dass alle Threads in einer Anwendung eine übereinstimmende Sicht auf die Daten im Speicher haben. Vielmehr können unterschiedliche Threads zum selben Zeitpunkt unterschiedliche Werte für dieselben Speicherzellen sehen.
Diese "relaxed cache coherence" hat in Java dazu geführt, dass mit Java 5 das Speichermodell der Sprache (JMM – Java Memory Model) überarbeitet und präzisiert wurde.  Die Sprachspezifikation definiert Garantien bzgl. Atomicity, Visibility und Reordering von Speicherzugriffen.  Auf diese Garantieren können sich die Programmierer verlassen; anderseits muss eine virtuelle Maschine die Sprachgarantieren auf Basis des jeweiligen Hardware-Memory-Modells implementieren.  Für Java-Entwickler bedeutet es, dass sie die Garantien des Speichermodells kennen müssen, um korrekte Multithread-Programme schreiben zu können.  Die Session gibt einen Überblick über die Regeln des Java-Speichermodells.

Seit Java 5 wurden Anstrengungen unternommen, die Multithread-Programmierung in Java durch Standardabstraktionen im JDK zu unterstützen.  Das Package java.util.concurrent liefert eine Reihe von Synchronisationsmechanismen (wie Lock, Semaphore, Barrier, Latch, Phaser, Queue und Deque).  Daneben gibt es mehrere Threadpool-Implementierungen.  Relativ neu ist der in Java 7 hinzugekommene Fork-Join-Pool, der für die Parallelverarbeitung von rekursiven, voneinander abhängigen Aufgaben konzipiert ist. 
Die Session betrachtet diesen neuen Threadpool näher.  Es wird der Unterschied zum herkömmlichen Thread-Pool erläutert; es wird Einblick in die Implementierung und Arbeitsweise des Fork-Join-Frameworks gegeben und seine Verwendung anhand von Beispielen gezeigt.  Der Fork.Join-Pool ist deshalb besonders interessant, weil er eine zentrale Rolle spielt im Zusammenhang mit der Parallelisierung von Zugriffen auf Sequenzen.  Im Rahmen des Java Enhancement Proposal JEP 107 "Bulk Data Operations for Collections" (auch als "filter/map/reduce for Java" bekannt) werden für Java 8 Erweiterungen an den bestehenden Collections im JDK spezifiziert, damit "bulk operations" in Zukunft automatisch von mehreren Threads parallel ausgeführt werden. 
 

 
PREREQUISITES

 
Level: mittel
Duration: 2x 60  min
Audience: Java-Entwickler, die sich für Multithread-Programmierung und/oder die Erweiterungen des JDK interessieren.
Prerequisites: Grundkenntnisse von Multithread-Programmierrung
Presented at: Java Users Group CH , Zürich, Switzerland, December 12-16, 2011
 

Related information:
Seminars
 
Concurrent Java
4-day seminar (open enrollment / on-site)
 
Papers
 
online FAQ Concurrent Programming in Java
Articles from the "Effective Java" column
  © Copyright 1995-2012 by Angelika Langer.  All Rights Reserved.    URL: < http://www.AngelikaLanger.com/Conferences/Abstracts/JMM-ForkJoin.htm  last update: 1 Mar 2012