Top Banner
Basic Java CompletableFuture Features Douglas C. Schmidt [email protected] www.dre.vanderbilt.edu/~schmidt Professor of Computer Science Institute for Software Integrated Systems Vanderbilt University Nashville, Tennessee, USA
19

Basic Java CompletableFuture Featuresschmidt/...Java-completablefuture-features.… · Basic CompletableFuture Features Mixing checked exceptions & Java streams is ugly.. 12 •Basic

Jul 04, 2020

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Basic Java CompletableFuture Featuresschmidt/...Java-completablefuture-features.… · Basic CompletableFuture Features Mixing checked exceptions & Java streams is ugly.. 12 •Basic

Basic Java CompletableFuture Features

Douglas C. [email protected]

www.dre.vanderbilt.edu/~schmidt

Professor of Computer Science

Institute for Software

Integrated Systems

Vanderbilt University

Nashville, Tennessee, USA

Page 2: Basic Java CompletableFuture Featuresschmidt/...Java-completablefuture-features.… · Basic CompletableFuture Features Mixing checked exceptions & Java streams is ugly.. 12 •Basic

2

Learning Objectives in this Part of the Lesson• Understand the basic completable

futures features

Page 3: Basic Java CompletableFuture Featuresschmidt/...Java-completablefuture-features.… · Basic CompletableFuture Features Mixing checked exceptions & Java streams is ugly.. 12 •Basic

3

Basic CompletableFuture

Features

Page 4: Basic Java CompletableFuture Featuresschmidt/...Java-completablefuture-features.… · Basic CompletableFuture Features Mixing checked exceptions & Java streams is ugly.. 12 •Basic

4

• Basic CompletableFuture features

Basic CompletableFuture Features

: Main

start()

new()

: Completable

Future

: Backround

Thread

complete()

join()

new()

See github.com/douglascraigschmidt/LiveLessons/tree/master/Java8/ex8

Page 5: Basic Java CompletableFuture Featuresschmidt/...Java-completablefuture-features.… · Basic CompletableFuture Features Mixing checked exceptions & Java streams is ugly.. 12 •Basic

5

• Basic CompletableFuture features

• Support the Future API

Basic CompletableFuture Features

See docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html

Page 6: Basic Java CompletableFuture Featuresschmidt/...Java-completablefuture-features.… · Basic CompletableFuture Features Mixing checked exceptions & Java streams is ugly.. 12 •Basic

6

• Basic CompletableFuture features

• Support the Future API

• Can (time-) block & poll

Basic CompletableFuture Features

See docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html

String f1 = "62675744/15668936";

String f2 = "609136/913704";

ForkJoinTask<BigFraction> f =

commonPool().submit(() -> {

BigFraction bf1 =

new BigFraction(f1);

BigFraction bf2 =

new BigFraction(f2);

return bf1.multiply(bf2);

});

...

BigFraction result = f.get();

// f.get(10, MILLISECONDS);

// f.get(0, 0);

Page 7: Basic Java CompletableFuture Featuresschmidt/...Java-completablefuture-features.… · Basic CompletableFuture Features Mixing checked exceptions & Java streams is ugly.. 12 •Basic

7

• Basic CompletableFuture features

• Support the Future API

• Can (time-) block & poll

• Can be cancelled & tested if cancelled/done

Basic CompletableFuture Features

See docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html

String f1 = "62675744/15668936";

String f2 = "609136/913704";

ForkJoinTask<BigFraction> f =

commonPool().submit(() -> {

BigFraction bf1 =

new BigFraction(f1);

BigFraction bf2 =

new BigFraction(f2);

return bf1.multiply(bf2);

});

...

if (!(f.isDone()

|| !f.isCancelled()))

f.cancel();

Page 8: Basic Java CompletableFuture Featuresschmidt/...Java-completablefuture-features.… · Basic CompletableFuture Features Mixing checked exceptions & Java streams is ugly.. 12 •Basic

8

• Basic CompletableFuture features

• Support the Future API

• Can (time-) block & poll

• Can be cancelled & tested if cancelled/done

• cancel() doesn’t interrupt the computation by default..

Basic CompletableFuture Features

See www.nurkiewicz.com/2015/03/completablefuture-cant-be-interrupted.html

String f1 = "62675744/15668936";

String f2 = "609136/913704";

ForkJoinTask<BigFraction> f =

commonPool().submit(() -> {

BigFraction bf1 =

new BigFraction(f1);

BigFraction bf2 =

new BigFraction(f2);

return bf1.multiply(bf2);

});

...

if (!(f.isDone()

|| !f.isCancelled()))

f.cancel();

Page 9: Basic Java CompletableFuture Featuresschmidt/...Java-completablefuture-features.… · Basic CompletableFuture Features Mixing checked exceptions & Java streams is ugly.. 12 •Basic

9

• Basic CompletableFuture features

• Support the Future API

• Define a join() method

Basic CompletableFuture Features

See docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html#join

Page 10: Basic Java CompletableFuture Featuresschmidt/...Java-completablefuture-features.… · Basic CompletableFuture Features Mixing checked exceptions & Java streams is ugly.. 12 •Basic

10

• Basic CompletableFuture features

• Support the Future API

• Define a join() method

• Behaves like get() withoutusing checked exceptions

Basic CompletableFuture Features

futures

.stream()

.map(CompletableFuture

::join)

.collect(toList())

CompletableFuture::join can be used as a method reference in a Java stream

Page 11: Basic Java CompletableFuture Featuresschmidt/...Java-completablefuture-features.… · Basic CompletableFuture Features Mixing checked exceptions & Java streams is ugly.. 12 •Basic

11

futures

.stream()

.map(future

-> try { future.get();

} catch (Exception e){

})

.collect(toList())

• Basic CompletableFuture features

• Support the Future API

• Define a join() method

• Behaves like get() withoutusing checked exceptions

Basic CompletableFuture Features

Mixing checked exceptions & Java streams is ugly..

Page 12: Basic Java CompletableFuture Featuresschmidt/...Java-completablefuture-features.… · Basic CompletableFuture Features Mixing checked exceptions & Java streams is ugly.. 12 •Basic

12

• Basic CompletableFuture features

• Support the Future API

• Define a join() method

• Behaves like get() withoutusing checked exceptions

• There is no timed version of join()

Basic CompletableFuture Features

Page 13: Basic Java CompletableFuture Featuresschmidt/...Java-completablefuture-features.… · Basic CompletableFuture Features Mixing checked exceptions & Java streams is ugly.. 12 •Basic

13

• Basic CompletableFuture features

• Support the Future API

• Define a join() method

• Can be completed explicitly

Basic CompletableFuture Features

See docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html#complete

Page 14: Basic Java CompletableFuture Featuresschmidt/...Java-completablefuture-features.… · Basic CompletableFuture Features Mixing checked exceptions & Java streams is ugly.. 12 •Basic

14

• Basic CompletableFuture features

• Support the Future API

• Define a join() method

• Can be completed explicitly

• i.e., sets result returned byget()/join() to a given value

Basic CompletableFuture FeaturesCompletableFuture<...> future =

new CompletableFuture<>();

new Thread (() -> {

...

future.complete(...);

}).start();

...

System.out.println(future.join());

Page 15: Basic Java CompletableFuture Featuresschmidt/...Java-completablefuture-features.… · Basic CompletableFuture Features Mixing checked exceptions & Java streams is ugly.. 12 •Basic

15

• Basic CompletableFuture features

• Support the Future API

• Define a join() method

• Can be completed explicitly

• i.e., sets result returned byget()/join() to a given value

Basic CompletableFuture FeaturesCompletableFuture<...> future =

new CompletableFuture<>();

new Thread (() -> {

...

future.complete(...);

}).start();

...

System.out.println(future.join());

Create an incomplete future

See docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html#CompletableFuture

Page 16: Basic Java CompletableFuture Featuresschmidt/...Java-completablefuture-features.… · Basic CompletableFuture Features Mixing checked exceptions & Java streams is ugly.. 12 •Basic

16

• Basic CompletableFuture features

• Support the Future API

• Define a join() method

• Can be completed explicitly

• i.e., sets result returned byget()/join() to a given value

Basic CompletableFuture Features

See docs.oracle.com/javase/8/docs/api/java/lang/Thread.html

CompletableFuture<...> future =

new CompletableFuture<>();

new Thread (() -> {

...

future.complete(...);

}).start();

...

System.out.println(future.join());Create/start a new thread that runs concurrently with the main thread

Page 17: Basic Java CompletableFuture Featuresschmidt/...Java-completablefuture-features.… · Basic CompletableFuture Features Mixing checked exceptions & Java streams is ugly.. 12 •Basic

17

• Basic CompletableFuture features

• Support the Future API

• Define a join() method

• Can be completed explicitly

• i.e., sets result returned byget()/join() to a given value

Basic CompletableFuture Features

See docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html#complete

CompletableFuture<...> future =

new CompletableFuture<>();

new Thread (() -> {

...

future.complete(...);

}).start();

...

System.out.println(future.join());

After complete() is done calls to join() will unblock

Page 18: Basic Java CompletableFuture Featuresschmidt/...Java-completablefuture-features.… · Basic CompletableFuture Features Mixing checked exceptions & Java streams is ugly.. 12 •Basic

18

• Basic CompletableFuture features

• Support the Future API

• Define a join() method

• Can be completed explicitly

• i.e., sets result returned byget()/join() to a given value

Basic CompletableFuture Features

See docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html#completedFuture

CompletableFuture<...> future =

new CompletableFuture<>();

final CompletableFuture<Long> zero

= CompletableFuture

.completedFuture(0L);

new Thread (() -> {

...

future.complete(zero.join());

}).start();

...

System.out.println(future.join());

A completable future can be initialized to a value/constant

Page 19: Basic Java CompletableFuture Featuresschmidt/...Java-completablefuture-features.… · Basic CompletableFuture Features Mixing checked exceptions & Java streams is ugly.. 12 •Basic

19

End of Basic Java CompletableFuture Features