Java ExecutorCompletionService: Introductionschmidt/cs891s/2019-PDFs/L4-Java-Execut… · Java...
Transcript of Java ExecutorCompletionService: Introductionschmidt/cs891s/2019-PDFs/L4-Java-Execut… · Java...
![Page 1: Java ExecutorCompletionService: Introductionschmidt/cs891s/2019-PDFs/L4-Java-Execut… · Java ExecutorCompletionService: Introduction Douglas C. Schmidt ... thread, even if some](https://reader033.fdocuments.net/reader033/viewer/2022043004/5f85820530ff5b5a402a3b3b/html5/thumbnails/1.jpg)
Java ExecutorCompletionService:
Introduction
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: Java ExecutorCompletionService: Introductionschmidt/cs891s/2019-PDFs/L4-Java-Execut… · Java ExecutorCompletionService: Introduction Douglas C. Schmidt ... thread, even if some](https://reader033.fdocuments.net/reader033/viewer/2022043004/5f85820530ff5b5a402a3b3b/html5/thumbnails/2.jpg)
2
Learning Objectives in this Part of the Lesson• Understand how Java CompletionService’s interface defines
a framework for handling the completion of async tasks
-completion
Queue
0..n
-executor
![Page 3: Java ExecutorCompletionService: Introductionschmidt/cs891s/2019-PDFs/L4-Java-Execut… · Java ExecutorCompletionService: Introduction Douglas C. Schmidt ... thread, even if some](https://reader033.fdocuments.net/reader033/viewer/2022043004/5f85820530ff5b5a402a3b3b/html5/thumbnails/3.jpg)
3
Learning Objectives in this Part of the Lesson• Understand how Java CompletionService’s interface defines
a framework for handling the completion of async tasks
• Know how to instantiate the JavaExecutorCompletionService
mExecutorService =
Executors.newFixedThreadPool
(Runtime
.getRuntime
.availableProcessors());
mExecutorCompletionService =
new ExecutorCompletionService<>
(mExecutorService);
![Page 4: Java ExecutorCompletionService: Introductionschmidt/cs891s/2019-PDFs/L4-Java-Execut… · Java ExecutorCompletionService: Introduction Douglas C. Schmidt ... thread, even if some](https://reader033.fdocuments.net/reader033/viewer/2022043004/5f85820530ff5b5a402a3b3b/html5/thumbnails/4.jpg)
4
Motivating the Java CompletionService Interface
![Page 5: Java ExecutorCompletionService: Introductionschmidt/cs891s/2019-PDFs/L4-Java-Execut… · Java ExecutorCompletionService: Introduction Douglas C. Schmidt ... thread, even if some](https://reader033.fdocuments.net/reader033/viewer/2022043004/5f85820530ff5b5a402a3b3b/html5/thumbnails/5.jpg)
5
• One problem with the ExecutorService implementation of the PrimeCheckerapp is that the future submit() returned must be handled synchronously
Motivating the Java CompletionService Interface
...
private class FutureRunnable
implements Runnable {
List<Future<PrimeCallable.PrimeResult>>
mFutures;
MainActivity mActivity; ...
public void run() {
mFutures.forEach(future -> {
PrimeCallable.PrimeResult pr =
rethrowSupplier(future::get)
.get();
...
This blocking problem is common w/the “synchronous future” processing model
future::get may block the thread, even if some other
futures may have completed
![Page 6: Java ExecutorCompletionService: Introductionschmidt/cs891s/2019-PDFs/L4-Java-Execut… · Java ExecutorCompletionService: Introduction Douglas C. Schmidt ... thread, even if some](https://reader033.fdocuments.net/reader033/viewer/2022043004/5f85820530ff5b5a402a3b3b/html5/thumbnails/6.jpg)
6
• CompletionService fixes this problem via an “asynchronous future” processing model
ThreadPoolExecutor
WorkerThreads
execute() run()
3.take()
4.run()
5.done()
Future
Future
Future
Future
Completion
Queue
Queueing
Future
WorkQueue
Queueing
Future
Queueing
Future
2.offer()
ExecutorCompletionService
submit()
take()
6.add()
1.submit(task)
7.take()
Queueing
Future
Two-way task results are stored in a completion queue & can be processed immediately
Motivating the Java CompletionService Interface
![Page 7: Java ExecutorCompletionService: Introductionschmidt/cs891s/2019-PDFs/L4-Java-Execut… · Java ExecutorCompletionService: Introduction Douglas C. Schmidt ... thread, even if some](https://reader033.fdocuments.net/reader033/viewer/2022043004/5f85820530ff5b5a402a3b3b/html5/thumbnails/7.jpg)
7
Overview of the Java CompletionService Interface
![Page 8: Java ExecutorCompletionService: Introductionschmidt/cs891s/2019-PDFs/L4-Java-Execut… · Java ExecutorCompletionService: Introduction Douglas C. Schmidt ... thread, even if some](https://reader033.fdocuments.net/reader033/viewer/2022043004/5f85820530ff5b5a402a3b3b/html5/thumbnails/8.jpg)
8
Overview of the Java CompletionService Interface
See docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletionService.html
-completion
Queue
0..n
-executor
• The CompletionService interface decouples async task invocation from the processing of completed task results
![Page 9: Java ExecutorCompletionService: Introductionschmidt/cs891s/2019-PDFs/L4-Java-Execut… · Java ExecutorCompletionService: Introduction Douglas C. Schmidt ... thread, even if some](https://reader033.fdocuments.net/reader033/viewer/2022043004/5f85820530ff5b5a402a3b3b/html5/thumbnails/9.jpg)
9
• The CompletionService interface decouples async task invocation from the processing of completed task results
• Implemented via the ExecutorCompletionService class
Overview of the Java CompletionService Interface
-completion
Queue
0..n
-executor
See docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorCompletionService.html
![Page 10: Java ExecutorCompletionService: Introductionschmidt/cs891s/2019-PDFs/L4-Java-Execut… · Java ExecutorCompletionService: Introduction Douglas C. Schmidt ... thread, even if some](https://reader033.fdocuments.net/reader033/viewer/2022043004/5f85820530ff5b5a402a3b3b/html5/thumbnails/10.jpg)
10
-completion
Queue
0..n
-executor
which contains an Executor & a BlockingQueue
Overview of the Java CompletionService Interface• The CompletionService interface decouples async task
invocation from the processing of completed task results
• Implemented via the ExecutorCompletionService class
![Page 11: Java ExecutorCompletionService: Introductionschmidt/cs891s/2019-PDFs/L4-Java-Execut… · Java ExecutorCompletionService: Introduction Douglas C. Schmidt ... thread, even if some](https://reader033.fdocuments.net/reader033/viewer/2022043004/5f85820530ff5b5a402a3b3b/html5/thumbnails/11.jpg)
11See docs.oracle.com/javase/8/docs/api/java/util/concurrent/Executor.html
Overview of the Java CompletionService Interface
-completion
Queue
0..n
-executor
• The CompletionService interface decouples async task invocation from the processing of completed task results
• Implemented via the ExecutorCompletionService class
An Executor runs tasks in a pool of threads
![Page 12: Java ExecutorCompletionService: Introductionschmidt/cs891s/2019-PDFs/L4-Java-Execut… · Java ExecutorCompletionService: Introduction Douglas C. Schmidt ... thread, even if some](https://reader033.fdocuments.net/reader033/viewer/2022043004/5f85820530ff5b5a402a3b3b/html5/thumbnails/12.jpg)
12
Overview of the Java CompletionService Interface
-completion
Queue
0..n
-executor
• The CompletionService interface decouples async task invocation from the processing of completed task results
• Implemented via the ExecutorCompletionService class
Completed tasks are put blocking queue accessed via take()/poll()
See docs.oracle.com/javase/8/docs/api/java/util/concurrent/BlockingQueue.html
![Page 13: Java ExecutorCompletionService: Introductionschmidt/cs891s/2019-PDFs/L4-Java-Execut… · Java ExecutorCompletionService: Introduction Douglas C. Schmidt ... thread, even if some](https://reader033.fdocuments.net/reader033/viewer/2022043004/5f85820530ff5b5a402a3b3b/html5/thumbnails/13.jpg)
13See src/share/classes/java/util/concurrent/ExecutorCompletionService.java
Overview of the Java CompletionService Interface
-completion
Queue
0..n
-executor
• The CompletionService interface decouples async task invocation from the processing of completed task results
• Implemented via the ExecutorCompletionService class
Extends FutureTask to queue a task when it’s “done”
![Page 14: Java ExecutorCompletionService: Introductionschmidt/cs891s/2019-PDFs/L4-Java-Execut… · Java ExecutorCompletionService: Introduction Douglas C. Schmidt ... thread, even if some](https://reader033.fdocuments.net/reader033/viewer/2022043004/5f85820530ff5b5a402a3b3b/html5/thumbnails/14.jpg)
14
• CompletionService can implement the Proactor pattern
See en.wikipedia.org/wiki/Proactor_pattern
Overview of the Java CompletionService Interface
Supports demultiplexing & dispatching of event handlers that are triggered by the completion of async events
![Page 15: Java ExecutorCompletionService: Introductionschmidt/cs891s/2019-PDFs/L4-Java-Execut… · Java ExecutorCompletionService: Introduction Douglas C. Schmidt ... thread, even if some](https://reader033.fdocuments.net/reader033/viewer/2022043004/5f85820530ff5b5a402a3b3b/html5/thumbnails/15.jpg)
15
Instantiating the JavaExecutorCompletionService
![Page 16: Java ExecutorCompletionService: Introductionschmidt/cs891s/2019-PDFs/L4-Java-Execut… · Java ExecutorCompletionService: Introduction Douglas C. Schmidt ... thread, even if some](https://reader033.fdocuments.net/reader033/viewer/2022043004/5f85820530ff5b5a402a3b3b/html5/thumbnails/16.jpg)
16
Instantiating the Java ExecutorCompletionService• ExecutorCompletionService implements CompletionService
& uses an Executor to execute tasks placed on a blocking queue when they complete
See docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorCompletionService.html
-completion
Queue
0..n
-executor
![Page 17: Java ExecutorCompletionService: Introductionschmidt/cs891s/2019-PDFs/L4-Java-Execut… · Java ExecutorCompletionService: Introduction Douglas C. Schmidt ... thread, even if some](https://reader033.fdocuments.net/reader033/viewer/2022043004/5f85820530ff5b5a402a3b3b/html5/thumbnails/17.jpg)
17
• A program typically creates an Executor (or ExecutorService) instance & then associates it with a new ExecutorCompletionService
mExecutorService =
Executors.newFixedThreadPool(Runtime.getRuntime()
.availableProcessors());
mExecutorCompletionService =
new ExecutorCompletionService<>(mExecutorService);
Instantiating the Java ExecutorCompletionService
![Page 18: Java ExecutorCompletionService: Introductionschmidt/cs891s/2019-PDFs/L4-Java-Execut… · Java ExecutorCompletionService: Introduction Douglas C. Schmidt ... thread, even if some](https://reader033.fdocuments.net/reader033/viewer/2022043004/5f85820530ff5b5a402a3b3b/html5/thumbnails/18.jpg)
18
• A program typically creates an Executor (or ExecutorService) instance & then associates it with a new ExecutorCompletionService
mExecutorService =
Executors.newFixedThreadPool(Runtime.getRuntime()
.availableProcessors());
mExecutorCompletionService =
new ExecutorCompletionService<>(mExecutorService);
Create an executor service whose thread pool size matches the # of cores
Instantiating the Java ExecutorCompletionService
![Page 19: Java ExecutorCompletionService: Introductionschmidt/cs891s/2019-PDFs/L4-Java-Execut… · Java ExecutorCompletionService: Introduction Douglas C. Schmidt ... thread, even if some](https://reader033.fdocuments.net/reader033/viewer/2022043004/5f85820530ff5b5a402a3b3b/html5/thumbnails/19.jpg)
19
• A program typically creates an Executor (or ExecutorService) instance & then associates it with a new ExecutorCompletionService
mExecutorService =
Executors.newFixedThreadPool(Runtime.getRuntime()
.availableProcessors());
mExecutorCompletionService =
new ExecutorCompletionService<>(mExecutorService);
Associate ExecutorCompletionService with executor service
Instantiating the Java ExecutorCompletionService
![Page 20: Java ExecutorCompletionService: Introductionschmidt/cs891s/2019-PDFs/L4-Java-Execut… · Java ExecutorCompletionService: Introduction Douglas C. Schmidt ... thread, even if some](https://reader033.fdocuments.net/reader033/viewer/2022043004/5f85820530ff5b5a402a3b3b/html5/thumbnails/20.jpg)
20
End of the Java Executor CompletionService:
Introduction