basic java completablefuture featuresschmidt/...java-completablefuture-features.… · basic...
TRANSCRIPT
![Page 1: Basic Java CompletableFuture Featuresschmidt/...Java-completablefuture-features.… · Basic CompletableFuture Features Mixing checked exceptions & Java streams is ugly.. 12 •Basic](https://reader035.vdocuments.us/reader035/viewer/2022081400/5f1b14d7de8b9f6d08567a42/html5/thumbnails/1.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022081400/5f1b14d7de8b9f6d08567a42/html5/thumbnails/2.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022081400/5f1b14d7de8b9f6d08567a42/html5/thumbnails/3.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022081400/5f1b14d7de8b9f6d08567a42/html5/thumbnails/4.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022081400/5f1b14d7de8b9f6d08567a42/html5/thumbnails/5.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022081400/5f1b14d7de8b9f6d08567a42/html5/thumbnails/6.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022081400/5f1b14d7de8b9f6d08567a42/html5/thumbnails/7.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022081400/5f1b14d7de8b9f6d08567a42/html5/thumbnails/8.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022081400/5f1b14d7de8b9f6d08567a42/html5/thumbnails/9.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022081400/5f1b14d7de8b9f6d08567a42/html5/thumbnails/10.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022081400/5f1b14d7de8b9f6d08567a42/html5/thumbnails/11.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022081400/5f1b14d7de8b9f6d08567a42/html5/thumbnails/12.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022081400/5f1b14d7de8b9f6d08567a42/html5/thumbnails/13.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022081400/5f1b14d7de8b9f6d08567a42/html5/thumbnails/14.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022081400/5f1b14d7de8b9f6d08567a42/html5/thumbnails/15.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022081400/5f1b14d7de8b9f6d08567a42/html5/thumbnails/16.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022081400/5f1b14d7de8b9f6d08567a42/html5/thumbnails/17.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022081400/5f1b14d7de8b9f6d08567a42/html5/thumbnails/18.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022081400/5f1b14d7de8b9f6d08567a42/html5/thumbnails/19.jpg)
19
End of Basic Java CompletableFuture Features