Soumettre la recherche
Mettre en ligne
Completable future
•
2 j'aime
•
934 vues
Srinivasan Raghvan
Suivre
Completable future . Presented at Java Users Group Bangalore
Lire moins
Lire la suite
Logiciels
Signaler
Partager
Signaler
Partager
1 sur 24
Télécharger maintenant
Télécharger pour lire hors ligne
Recommandé
Java 8 Workshop
Java 8 Workshop
Mario Fusco
Introduction to java 8 stream api
Introduction to java 8 stream api
Vladislav sidlyarevich
Introduction to Apache Airflow
Introduction to Apache Airflow
mutt_data
Introducing Apache Airflow and how we are using it
Introducing Apache Airflow and how we are using it
Bruno Faria
Using Logstash, elasticsearch & kibana
Using Logstash, elasticsearch & kibana
Alejandro E Brito Monedero
Developing RESTful Web APIs with Python, Flask and MongoDB
Developing RESTful Web APIs with Python, Flask and MongoDB
Nicola Iarocci
Java 8 lambda
Java 8 lambda
Manav Prasad
Let's talk about Garbage Collection
Let's talk about Garbage Collection
Haim Yadid
Recommandé
Java 8 Workshop
Java 8 Workshop
Mario Fusco
Introduction to java 8 stream api
Introduction to java 8 stream api
Vladislav sidlyarevich
Introduction to Apache Airflow
Introduction to Apache Airflow
mutt_data
Introducing Apache Airflow and how we are using it
Introducing Apache Airflow and how we are using it
Bruno Faria
Using Logstash, elasticsearch & kibana
Using Logstash, elasticsearch & kibana
Alejandro E Brito Monedero
Developing RESTful Web APIs with Python, Flask and MongoDB
Developing RESTful Web APIs with Python, Flask and MongoDB
Nicola Iarocci
Java 8 lambda
Java 8 lambda
Manav Prasad
Let's talk about Garbage Collection
Let's talk about Garbage Collection
Haim Yadid
Whitebox testing of Spring Boot applications
Whitebox testing of Spring Boot applications
Yura Nosenko
Trino: A Ludicrously Fast Query Engine - Pulsar Summit NA 2021
Trino: A Ludicrously Fast Query Engine - Pulsar Summit NA 2021
StreamNative
Spring batch for large enterprises operations
Spring batch for large enterprises operations
Ignasi González
Real World Event Sourcing and CQRS
Real World Event Sourcing and CQRS
Matthew Hawkins
ELK Stack
ELK Stack
Eberhard Wolff
Clean architectures with fast api pycones
Clean architectures with fast api pycones
Alvaro Del Castillo
Airflow presentation
Airflow presentation
Ilias Okacha
JS Event Loop
JS Event Loop
Saai Vignesh P
서비스 모니터링 구현 사례 공유 - Realtime log monitoring platform-PMon을 ...
서비스 모니터링 구현 사례 공유 - Realtime log monitoring platform-PMon을 ...
Jemin Huh
Sync, async and multithreading
Sync, async and multithreading
Tuan Chau
Spring data jpa
Spring data jpa
Jeevesh Pandey
Java Course 8: I/O, Files and Streams
Java Course 8: I/O, Files and Streams
Anton Keks
Quarkus k8s
Quarkus k8s
Georgios Andrianakis
java.io - streams and files
java.io - streams and files
Marcello Thiry
Spring Security 5
Spring Security 5
Jesus Perez Franco
JDBC – Java Database Connectivity
JDBC – Java Database Connectivity
Information Technology
Spark Summit EU talk by Ted Malaska
Spark Summit EU talk by Ted Malaska
Spark Summit
Java 8 Stream API. A different way to process collections.
Java 8 Stream API. A different way to process collections.
David Gómez García
Java Strings
Java Strings
RaBiya Chaudhry
Spring Boot
Spring Boot
HongSeong Jeon
Asynchronous API in Java8, how to use CompletableFuture
Asynchronous API in Java8, how to use CompletableFuture
José Paumard
The Future of Futures - A Talk About Java 8 CompletableFutures
The Future of Futures - A Talk About Java 8 CompletableFutures
Haim Yadid
Contenu connexe
Tendances
Whitebox testing of Spring Boot applications
Whitebox testing of Spring Boot applications
Yura Nosenko
Trino: A Ludicrously Fast Query Engine - Pulsar Summit NA 2021
Trino: A Ludicrously Fast Query Engine - Pulsar Summit NA 2021
StreamNative
Spring batch for large enterprises operations
Spring batch for large enterprises operations
Ignasi González
Real World Event Sourcing and CQRS
Real World Event Sourcing and CQRS
Matthew Hawkins
ELK Stack
ELK Stack
Eberhard Wolff
Clean architectures with fast api pycones
Clean architectures with fast api pycones
Alvaro Del Castillo
Airflow presentation
Airflow presentation
Ilias Okacha
JS Event Loop
JS Event Loop
Saai Vignesh P
서비스 모니터링 구현 사례 공유 - Realtime log monitoring platform-PMon을 ...
서비스 모니터링 구현 사례 공유 - Realtime log monitoring platform-PMon을 ...
Jemin Huh
Sync, async and multithreading
Sync, async and multithreading
Tuan Chau
Spring data jpa
Spring data jpa
Jeevesh Pandey
Java Course 8: I/O, Files and Streams
Java Course 8: I/O, Files and Streams
Anton Keks
Quarkus k8s
Quarkus k8s
Georgios Andrianakis
java.io - streams and files
java.io - streams and files
Marcello Thiry
Spring Security 5
Spring Security 5
Jesus Perez Franco
JDBC – Java Database Connectivity
JDBC – Java Database Connectivity
Information Technology
Spark Summit EU talk by Ted Malaska
Spark Summit EU talk by Ted Malaska
Spark Summit
Java 8 Stream API. A different way to process collections.
Java 8 Stream API. A different way to process collections.
David Gómez García
Java Strings
Java Strings
RaBiya Chaudhry
Spring Boot
Spring Boot
HongSeong Jeon
Tendances
(20)
Whitebox testing of Spring Boot applications
Whitebox testing of Spring Boot applications
Trino: A Ludicrously Fast Query Engine - Pulsar Summit NA 2021
Trino: A Ludicrously Fast Query Engine - Pulsar Summit NA 2021
Spring batch for large enterprises operations
Spring batch for large enterprises operations
Real World Event Sourcing and CQRS
Real World Event Sourcing and CQRS
ELK Stack
ELK Stack
Clean architectures with fast api pycones
Clean architectures with fast api pycones
Airflow presentation
Airflow presentation
JS Event Loop
JS Event Loop
서비스 모니터링 구현 사례 공유 - Realtime log monitoring platform-PMon을 ...
서비스 모니터링 구현 사례 공유 - Realtime log monitoring platform-PMon을 ...
Sync, async and multithreading
Sync, async and multithreading
Spring data jpa
Spring data jpa
Java Course 8: I/O, Files and Streams
Java Course 8: I/O, Files and Streams
Quarkus k8s
Quarkus k8s
java.io - streams and files
java.io - streams and files
Spring Security 5
Spring Security 5
JDBC – Java Database Connectivity
JDBC – Java Database Connectivity
Spark Summit EU talk by Ted Malaska
Spark Summit EU talk by Ted Malaska
Java 8 Stream API. A different way to process collections.
Java 8 Stream API. A different way to process collections.
Java Strings
Java Strings
Spring Boot
Spring Boot
En vedette
Asynchronous API in Java8, how to use CompletableFuture
Asynchronous API in Java8, how to use CompletableFuture
José Paumard
The Future of Futures - A Talk About Java 8 CompletableFutures
The Future of Futures - A Talk About Java 8 CompletableFutures
Haim Yadid
CompletableFuture
CompletableFuture
koji lin
10 Sets of Best Practices for Java 8
10 Sets of Best Practices for Java 8
Garth Gilmour
Step-by-Step Introduction to Apache Flink
Step-by-Step Introduction to Apache Flink
Slim Baltagi
Why apache Flink is the 4G of Big Data Analytics Frameworks
Why apache Flink is the 4G of Big Data Analytics Frameworks
Slim Baltagi
En vedette
(6)
Asynchronous API in Java8, how to use CompletableFuture
Asynchronous API in Java8, how to use CompletableFuture
The Future of Futures - A Talk About Java 8 CompletableFutures
The Future of Futures - A Talk About Java 8 CompletableFutures
CompletableFuture
CompletableFuture
10 Sets of Best Practices for Java 8
10 Sets of Best Practices for Java 8
Step-by-Step Introduction to Apache Flink
Step-by-Step Introduction to Apache Flink
Why apache Flink is the 4G of Big Data Analytics Frameworks
Why apache Flink is the 4G of Big Data Analytics Frameworks
Similaire à Completable future
Functional Programming With Lambdas and Streams in JDK8
Functional Programming With Lambdas and Streams in JDK8
IndicThreads
Lambdas and Streams in Java SE 8: Making Bulk Operations simple - Simon Ritter
Lambdas and Streams in Java SE 8: Making Bulk Operations simple - Simon Ritter
JAXLondon2014
Lambdas And Streams in JDK8
Lambdas And Streams in JDK8
Simon Ritter
What's New in Java 8
What's New in Java 8
javafxpert
JSR 236 Concurrency Utils for EE presentation for JavaOne 2013 (CON7948)
JSR 236 Concurrency Utils for EE presentation for JavaOne 2013 (CON7948)
Fred Rowe
Lambdas : Beyond The Basics
Lambdas : Beyond The Basics
Simon Ritter
"Quantum" Performance Effects
"Quantum" Performance Effects
Sergey Kuksenko
Jakarta Concurrency: Present and Future
Jakarta Concurrency: Present and Future
Payara
Proxy deep-dive java-one_20151027_001
Proxy deep-dive java-one_20151027_001
Sven Ruppert
GlassFish BOF
GlassFish BOF
glassfish
Cloud Native Serverless Java — Orkhan Gasimov
Cloud Native Serverless Java — Orkhan Gasimov
GlobalLogic Ukraine
JavaOne San Francisco 2013 - Servlet 3.1 (JSR 340)
JavaOne San Francisco 2013 - Servlet 3.1 (JSR 340)
Shing Wai Chan
Interactive Java Support to your tool -- The JShell API and Architecture
Interactive Java Support to your tool -- The JShell API and Architecture
JavaDayUA
2015 Java update and roadmap, JUG sevilla
2015 Java update and roadmap, JUG sevilla
Trisha Gee
Java ee7 1hour
Java ee7 1hour
Frank Rodriguez
Batch Applications for the Java Platform
Batch Applications for the Java Platform
Sivakumar Thyagarajan
OTN Tour 2013: What's new in java EE 7
OTN Tour 2013: What's new in java EE 7
Bruno Borges
Design Patterns - Part 1 of 2
Design Patterns - Part 1 of 2
Savio Sebastian
MySQL Proxy. A powerful, flexible MySQL toolbox.
MySQL Proxy. A powerful, flexible MySQL toolbox.
Miguel Araújo
Java Cloud and Container Ready
Java Cloud and Container Ready
CodeOps Technologies LLP
Similaire à Completable future
(20)
Functional Programming With Lambdas and Streams in JDK8
Functional Programming With Lambdas and Streams in JDK8
Lambdas and Streams in Java SE 8: Making Bulk Operations simple - Simon Ritter
Lambdas and Streams in Java SE 8: Making Bulk Operations simple - Simon Ritter
Lambdas And Streams in JDK8
Lambdas And Streams in JDK8
What's New in Java 8
What's New in Java 8
JSR 236 Concurrency Utils for EE presentation for JavaOne 2013 (CON7948)
JSR 236 Concurrency Utils for EE presentation for JavaOne 2013 (CON7948)
Lambdas : Beyond The Basics
Lambdas : Beyond The Basics
"Quantum" Performance Effects
"Quantum" Performance Effects
Jakarta Concurrency: Present and Future
Jakarta Concurrency: Present and Future
Proxy deep-dive java-one_20151027_001
Proxy deep-dive java-one_20151027_001
GlassFish BOF
GlassFish BOF
Cloud Native Serverless Java — Orkhan Gasimov
Cloud Native Serverless Java — Orkhan Gasimov
JavaOne San Francisco 2013 - Servlet 3.1 (JSR 340)
JavaOne San Francisco 2013 - Servlet 3.1 (JSR 340)
Interactive Java Support to your tool -- The JShell API and Architecture
Interactive Java Support to your tool -- The JShell API and Architecture
2015 Java update and roadmap, JUG sevilla
2015 Java update and roadmap, JUG sevilla
Java ee7 1hour
Java ee7 1hour
Batch Applications for the Java Platform
Batch Applications for the Java Platform
OTN Tour 2013: What's new in java EE 7
OTN Tour 2013: What's new in java EE 7
Design Patterns - Part 1 of 2
Design Patterns - Part 1 of 2
MySQL Proxy. A powerful, flexible MySQL toolbox.
MySQL Proxy. A powerful, flexible MySQL toolbox.
Java Cloud and Container Ready
Java Cloud and Container Ready
Dernier
Sending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdf
31events.com
Powering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data Streams
Safe Software
Odoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 Enterprise
preethippts
2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shards
Christopher Curtin
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
RTS corp
How to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion Application
BradBedford3
What’s New in VictoriaMetrics: Q1 2024 Updates
What’s New in VictoriaMetrics: Q1 2024 Updates
VictoriaMetrics
Best Angular 17 Classroom & Online training - Naresh IT
Best Angular 17 Classroom & Online training - Naresh IT
manoharjgpsolutions
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full Recording
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full Recording
Shane Coughlan
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
Christian Birchler
VK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web Development
vyaparkranti
Osi security architecture in network.pptx
Osi security architecture in network.pptx
VinzoCenzo
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
RTS corp
VictoriaMetrics Anomaly Detection Updates: Q1 2024
VictoriaMetrics Anomaly Detection Updates: Q1 2024
VictoriaMetrics
Patterns for automating API delivery. API conference
Patterns for automating API delivery. API conference
ssuser9e7c64
Ronisha Informatics Private Limited Catalogue
Ronisha Informatics Private Limited Catalogue
itservices996
Introduction to Firebase Workshop Slides
Introduction to Firebase Workshop Slides
vaideheekore1
Effectively Troubleshoot 9 Types of OutOfMemoryError
Effectively Troubleshoot 9 Types of OutOfMemoryError
Tier1 app
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
Andreas Kunz
eSoftTools IMAP Backup Software and migration tools
eSoftTools IMAP Backup Software and migration tools
osttopstonverter
Dernier
(20)
Sending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdf
Powering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data Streams
Odoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 Enterprise
2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shards
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
How to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion Application
What’s New in VictoriaMetrics: Q1 2024 Updates
What’s New in VictoriaMetrics: Q1 2024 Updates
Best Angular 17 Classroom & Online training - Naresh IT
Best Angular 17 Classroom & Online training - Naresh IT
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full Recording
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full Recording
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
VK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web Development
Osi security architecture in network.pptx
Osi security architecture in network.pptx
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
VictoriaMetrics Anomaly Detection Updates: Q1 2024
VictoriaMetrics Anomaly Detection Updates: Q1 2024
Patterns for automating API delivery. API conference
Patterns for automating API delivery. API conference
Ronisha Informatics Private Limited Catalogue
Ronisha Informatics Private Limited Catalogue
Introduction to Firebase Workshop Slides
Introduction to Firebase Workshop Slides
Effectively Troubleshoot 9 Types of OutOfMemoryError
Effectively Troubleshoot 9 Types of OutOfMemoryError
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
eSoftTools IMAP Backup Software and migration tools
eSoftTools IMAP Backup Software and migration tools
Completable future
1.
2.
3.
Completable Future Srinivasan Raghavan Senior
Member of Technical Staff Java Platform Group Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
4.
Copyright © 2015,
Oracle and/or its affiliates. All rights reserved. | Program Agenda java.util.Future Introduction Cloud Services Design and the fight for Performance CompletableFuture and power of parallelism Building powerful libraries with Completable Future 1 2 3 4 4
5.
Copyright © 2015,
Oracle and/or its affiliates. All rights reserved. | java.util.Future Introduction • Before jdk1.5 , no java.util.concurrent.*, only threads ,synchronized primitives • W ite o e , u a ywhe e ? – g eat su ess , But u it a illio ti es , wo k the sa e ? ig uestio • In came java.util.concurrent.* with executor service and future tasks and many other concurrency constructs • A java.util.Future is a construct which holds a result available at a later time • Future is asynchronous , but its not non-blocking 5
6.
Copyright © 2015,
Oracle and/or its affiliates. All rights reserved. | The Executor Service and Future Task • Executors contains pool of threads which accepts tasks and supplies to the Future • When a task is submitted to the executor it returns a future and future.get() would block the computation until it ends 6 ExecutorService executorService = Executors.newFixedThreadPool(20); Future<Integer> future = executorService.submit(new Callable<Integer>() { @Override public Integer call() throws Exception { return 42; } }); System.out.println(future.get()); executorService.shutdown(); User Executor Task (Callable) Future
7.
Copyright © 2015,
Oracle and/or its affiliates. All rights reserved. | What can be done ? • Future can allow computation in the background so improving performance • Future.get() would block the thread and wait till the computation is complete and get the result • Can get an exception if there is a failure • future.cancel() cancels the computation • future.isDone() checks the computation is complete • A d that’s it ///// 7 ExecutorService executorService = Executors.newFixedThreadPool(20); Future<Integer> future = executorService.submit(new Callable<Integer>() { @Override public Integer call() throws Exception { //Some complex work return 42; } }); System.out.println(future.get()); executorService.shutdown();
8.
Copyright © 2015,
Oracle and/or its affiliates. All rights reserved. | Distributed Cloud Services Design and the fight for Performance 8
9.
Copyright © 2015,
Oracle and/or its affiliates. All rights reserved. | A Typical distributed cloud service 9 Get data from service provider 1 Get data from service provider 3 Get data from service provider 2 Combine Data Response(result) Request(userData,reuestParams) Processing for analytics Process data for the user Generate recommendation
10.
Copyright © 2015,
Oracle and/or its affiliates. All rights reserved. | Performance Bottlenecks and impacts • Java.util.Future can help in parallelism • But it cannot help with pipeline the tasks and managing the thread pool for you • Future does not supports call backs and chaining of operations • Building libraries with future can be complictaed • Performing in a serial way can impact the latency big time • It can destroy all benefits of having distributed services • No amount of horizontal and vertical scaling can help • Without dynamic services offerings business can be affected 10
11.
Copyright © 2015,
Oracle and/or its affiliates. All rights reserved. | CompletableFuture and power of parallelism 11
12.
Copyright © 2015,
Oracle and/or its affiliates. All rights reserved. | What is Completable future ? • Its new addition to java 8 • Asynchronous, allows registering asyc callbacks just like java scripts, event-driven programming model • Support for depending functions to be triggered on completion • Each stage can be executed with different executor pool • Also comes with a built in thread pool for executing tasks • Built in lambda support ,super flexible and scalable api 12
13.
Copyright © 2015,
Oracle and/or its affiliates. All rights reserved. | Basics 13 CompletableFuture<String> future = CompletableFuture.supplyAsync(new Supplier<String>() { @Override public String get() { // ...long running... return "42"; } }, executor1); future.get(); //Come on ... we are in JDK 8 !!! CompletableFuture<String> future = CompletableFuture .supplyAsync(() -> "42",executor1); future.get();
14.
Copyright © 2015,
Oracle and/or its affiliates. All rights reserved. | Lambdas , Crash Recap 14
15.
Copyright © 2015,
Oracle and/or its affiliates. All rights reserved. | Lambdas • Function definition that is not bound to an identifier 15 /** * * This is a piece of code that illustrate how lambdas work in Java 8 * * Given an example * * f(x) = 2x+5; * * given x= 2 ; f(x) = 9 ; * * z(x)= f(g(x)) where g(x) =3x+5 * * z(x) = 2(3x+5) +5 = 6x+15 12+15 = 27 * * */ public class LambdaUnderStanding2 { @FunctionalInterface static interface Funct { int apply(int x); default Funct compose(Funct before) { return (x) -> apply(before.apply(x)); } } public static void main(String[] args) { Funct annoymous = new Funct() { @Override public int apply(int x) { return 2 * x + 5;; } }; Funct funct = (x) -> 2 * x + 5; System.out.println(funct.apply(2)); Funct composed = funct.compose((x) -> 3 * x + 5); System.out.println(composed.apply(2)); } }
16.
Copyright © 2015,
Oracle and/or its affiliates. All rights reserved. | Java 8 Functional Interface 16 Predicate<Integer> test = (x) -> x> 10; Function<Integer, Integer> function = (x) -> 3 * x + 5; Consumer<Integer> print = (x) -> System.out.println(x); BiFunction<Integer, Integer, Integer> biFunction = (x, y) -> 3 * x + 4* y + 2; Supplier<Integer> supplier = () -> Integer.MAX_VALUE;
17.
Copyright © 2015,
Oracle and/or its affiliates. All rights reserved. | thenApply() -transformations 17 /** * Classic call back present in javascript or scala . * theApply is like run this function when the result *arrives from previous stages */ final CompletableFuture<Integer> future1 = CompletableFuture .supplyAsync(() -> "42", executor1).thenApply( (x) -> Integer.parseInt(x)); /** * thenApply is trasformative changing CompletableFuture<Integer> to * CompletableFuture<Double> */ CompletableFuture<Double> future2 = CompletableFuture .supplyAsync(() -> "42", executor1) .thenApply((x) -> Integer.parseInt(x)) .thenApply(r -> r * r * Math.PI); /** * U can supply a differnt executor pool for thenApply */ CompletableFuture<Double> future = CompletableFuture .supplyAsync(() -> "42", executor1) .thenApplyAsync((x) -> Integer.parseInt(x), executor2) .thenApplyAsync(r -> r * r * Math.PI, executor2);
18.
Copyright © 2015,
Oracle and/or its affiliates. All rights reserved. | thenCombine() , whenComplete() –completion 18 final CompletableFuture<Integer> future = CompletableFuture .supplyAsync(() -> "32", executor1).thenApply( (x) -> Integer.parseInt(x)); CompletableFuture.supplyAsync(() -> "42", executor2) .thenApply((x) -> Integer.parseInt(x)) .thenCombine(future, (x, y) -> x + y) .thenAccept((result) -> System.out.println(result)); /** * When complete is final stage where it can check the execpetions * propagated and pass results through it */ final CompletableFuture<Integer> future = CompletableFuture .supplyAsync(() -> "42", executor1) .thenApply((x) -> Integer.parseInt(x)) .whenComplete( (x, throwable) -> { if (throwable != null) { Logger.getAnonymousLogger().log(Level.SEVERE, "Logging" + throwable); } else { Logger.getAnonymousLogger().log(Level.FINE, " Passed " + x); } });
19.
Copyright © 2015,
Oracle and/or its affiliates. All rights reserved. | thenCombine() allOf() - combining futures 19 /** * Combining two dependent futures */ final CompletableFuture<Integer> future = CompletableFuture .supplyAsync(() -> "32", executor1).thenApply( (x) -> Integer.parseInt(x)); CompletableFuture.supplyAsync(() -> "42", executor2) .thenApply((x) -> Integer.parseInt(x)) .thenCombine(future, (x, y) -> x + y) .thenAccept((result) -> System.out.println(result)); /** * Combining n futures unrelated */ CompletableFuture<Void> future2 = CompletableFuture .supplyAsync(() -> "42", executor1) .thenApplyAsync((x) -> Integer.parseInt(x), executor2) .thenAcceptAsync( (x) -> Logger.getAnonymousLogger().log(Level.FINE, "Logging" + x), executor2); CompletableFuture<Void> future1 = CompletableFuture .supplyAsync(() -> “ ", executor1) .thenApplyAsync((x) -> Integer.parseInt(x), executor2) .thenAcceptAsync( (x) -> Logger.getAnonymousLogger().log(Level.FINE, "Logging" + x), executor2); CompletableFuture.allOf(future1,future2).join();
20.
Copyright © 2015,
Oracle and/or its affiliates. All rights reserved. | Building powerful libraries with Completable Future 20
21.
Copyright © 2015,
Oracle and/or its affiliates. All rights reserved. | Building powerful libraries with completable futures • Building scalable service orchestrator • Building dynamic http client framework • Improve parallelism in existing services with are done serial • Building libraries tuned for vertical scalability 21
22.
Copyright © 2015,
Oracle and/or its affiliates. All rights reserved. | References • https://docs.oracle.com/javase/tutorial/ • https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Completa bleFuture.html • http://cs.oswego.edu/mailman/listinfo/concurrency-interest • https://github.com/srinivasanraghavan/functional 22
23.
Copyright © 2015,
Oracle and/or its affiliates. All rights reserved. | Questions ? 23
Télécharger maintenant