© Excellent backgrounds/Shutterstock.com
Java Magazin
Teil 6: Concurrency Updates

Nebenläufig und reaktiv

Wir wollen Ihnen in dieser Artikelreihe einen Überblick über die Neuerungen in Java 9 verschaffen und einige Features von Java 9 kurz erläutern. Dabei haben wir diejenigen Themen ausgewählt, von denen wir denken, dass sie für Java-Entwickler am interessantesten sind. Und natürlich werfen wir einen Blick auf die größte Neuerung: das Modulsystem.

Angelika Langer, Klaus Kreft


Java 9 – ÜberblickTeil 1: Ergänzungen der Sprache und der existierenden APIsTeil 2: JVM Internals Teil 3: Neue und alte JDK-Tools Teil 4: Project Jigsaw aka Java Module System Teil 5: JDK-interne Packages wie sun.misc.* und ihr Ersatz Teil 6: Concurrency Updates

Es gibt einige Ergänzungen in den Abstraktionen der java.util.concurrent.*-Packages [1]. Die Atomic-Klassen im Package java.util.concurrent.atomic haben neue Methoden bekommen, mit denen Zugriffsmodi wie bei den in Java 9 neuen Variable Handles möglich sind. Beispiele sind Methoden wie get/setPlain(), getAcquire(), setRelease(), get/setOpaque()und weakCompareAndSetVolatile() in den Klassen AtomicBoolean, AtomicLong und AtomicReference.

Die Threadklasse hat eine neue statische Methode onSpinWait(), mit der der aktuelle Thread zu erkennen gibt, dass er in einen Spin-Wait-Loop geht – auch Busy Wait genannt [2]. Auf manchen Plattformen kann dieser Hinweis zur Laufzeit genutzt werden, um die Performance zu verbessern. Das ist beispielsweise auf Intel-Prozessoren so, denn im x86-Instruction-Set gibt es extra eine PAUSE-Anweisung für solche Situationen. Es handelt sich aber bei der Methode onSpinWait() lediglich um einen Hinweis, der auch ignoriert werden kann, wenn die Plattform keine entsprechenden Optimierungsmöglichkeiten bietet.

Ergänzungen zu „CompletableFuture“

Die Klasse CompletableFuture, die mit Java 8 zum JDK hinzugekommen ist, hat einige neue Methoden bekommen. Bislang gab es keine Möglichkeit, über das CompletableFuture einen Task mit Time-out zu starten. Man kann ihn starten und Funktionalität für die asynchrone Resultatverarbeitung anhängen. Falls aber der Task zu lange braucht, bis er das Ergebnis liefert, konnte man bislang nicht ohne Weiteres nach einer bestimmten Zeit abbrechen und ohne das Resultat weitermachen. Dafür gibt es jetzt mit Java 9 die Methoden orTimeout() und completeOnTimeout(). Hier ein Beispiel:

CompletableFuture .supplyAsync(()->blockingReadPage(url)) .orTimeout(1,TimeUnit.SECONDS) .whenComplete((r,e)->{ if (r!=null) System.out.println(r); if (e!=null && e instanceof TimeoutException) System.out.println("time limit exceeded"););

Die Methode orTimeout() bewirkt, dass das Complet­ableFuture nach Ablauf der Time-out-Zeit mit einer Time­out­Exception zurückkommt. Bei der Methode com­pleteOnTimeout() kommt keine TimeoutExcep­tion, sondern man kann einen Ersatzwert angeben, der dann im Falle des Time-outs anstelle des eigentlichen Resultats verwendet wird. Der Time-o...

Java Magazin
Teil 6: Concurrency Updates

Nebenläufig und reaktiv

Wir wollen Ihnen in dieser Artikelreihe einen Überblick über die Neuerungen in Java 9 verschaffen und einige Features von Java 9 kurz erläutern. Dabei haben wir diejenigen Themen ausgewählt, von denen wir denken, dass sie für Java-Entwickler am interessantesten sind. Und natürlich werfen wir einen Blick auf die größte Neuerung: das Modulsystem.

Angelika Langer, Klaus Kreft


Java 9 – ÜberblickTeil 1: Ergänzungen der Sprache und der existierenden APIsTeil 2: JVM Internals Teil 3: Neue und alte JDK-Tools Teil 4: Project Jigsaw aka Java Module System Teil 5: JDK-interne Packages wie sun.misc.* und ihr Ersatz Teil 6: Concurrency Updates

Es gibt einige Ergänzungen in den Abstraktionen der java.util.concurrent.*-Packages [1]. Die Atomic-Klassen im Package java.util.concurrent.atomic haben neue Methoden bekommen, mit denen Zugriffsmodi wie bei den in Java 9 neuen Variable Handles möglich sind. Beispiele sind Methoden wie get/setPlain(), getAcquire(), setRelease(), get/setOpaque()und weakCompareAndSetVolatile() in den Klassen AtomicBoolean, AtomicLong und AtomicReference.

Die Threadklasse hat eine neue statische Methode onSpinWait(), mit der der aktuelle Thread zu erkennen gibt, dass er in einen Spin-Wait-Loop geht – auch Busy Wait genannt [2]. Auf manchen Plattformen kann dieser Hinweis zur Laufzeit genutzt werden, um die Performance zu verbessern. Das ist beispielsweise auf Intel-Prozessoren so, denn im x86-Instruction-Set gibt es extra eine PAUSE-Anweisung für solche Situationen. Es handelt sich aber bei der Methode onSpinWait() lediglich um einen Hinweis, der auch ignoriert werden kann, wenn die Plattform keine entsprechenden Optimierungsmöglichkeiten bietet.

Ergänzungen zu „CompletableFuture“

Die Klasse CompletableFuture, die mit Java 8 zum JDK hinzugekommen ist, hat einige neue Methoden bekommen. Bislang gab es keine Möglichkeit, über das CompletableFuture einen Task mit Time-out zu starten. Man kann ihn starten und Funktionalität für die asynchrone Resultatverarbeitung anhängen. Falls aber der Task zu lange braucht, bis er das Ergebnis liefert, konnte man bislang nicht ohne Weiteres nach einer bestimmten Zeit abbrechen und ohne das Resultat weitermachen. Dafür gibt es jetzt mit Java 9 die Methoden orTimeout() und completeOnTimeout(). Hier ein Beispiel:

CompletableFuture .supplyAsync(()->blockingReadPage(url)) .orTimeout(1,TimeUnit.SECONDS) .whenComplete((r,e)->{ if (r!=null) System.out.println(r); if (e!=null && e instanceof TimeoutException) System.out.println("time limit exceeded"););

Die Methode orTimeout() bewirkt, dass das Complet­ableFuture nach Ablauf der Time-out-Zeit mit einer Time­out­Exception zurückkommt. Bei der Methode com­pleteOnTimeout() kommt keine TimeoutExcep­tion, sondern man kann einen Ersatzwert angeben, der dann im Falle des Time-outs anstelle des eigentlichen Resultats verwendet wird. Der Time-o...

Neugierig geworden?


    
Loading...

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang