mirror of
https://github.com/tiennm99/java-design-patterns.git
synced 2026-10-13 20:14:59 +00:00
docs: Content SEO updates (#2990)
* update yaml frontmatter format * update abstract document * update abstract factory * use the new pattern template * acyclic visitor seo * adapter seo * ambassador seo * acl seo * aaa seo * async method invocation seo * balking seo * bridge seo * builder seo * business delegate and bytecode seo * caching seo * callback seo * chain seo * update headings * circuit breaker seo * client session + collecting parameter seo * collection pipeline seo * combinator SEO * command seo * cqrs seo * commander seo * component seo * composite seo * composite entity seo * composite view seo * context object seo * converter seo * crtp seo * currying seo * dao seo * data bus seo * data locality seo * data mapper seo * dto seo * decorator seo * delegation seo * di seo * dirty flag seo * domain model seo * double buffer seo * double checked locking seo * double dispatch seo * dynamic proxy seo * event aggregator seo * event-based asynchronous seo * eda seo * event queue seo * event sourcing seo * execute around seo * extension objects seo * facade seo * factory seo * factory kit seo * factory method seo * fanout/fanin seo * feature toggle seo * filterer seo * fluent interface seo * flux seo * flyweight seo * front controller seo * function composition seo * game loop seo * gateway seo * guarded suspension seo * half-sync/half-async seo * health check seo * hexagonal seo * identity map seo * intercepting filter seo * interpreter seo * iterator seo * layers seo * lazy loading seo * leader election seo * leader/followers seo * lockable object seo * rename and add seo for marker interface * master-worker seo * mediator seo * memento seo * metadata mapping seo * microservice aggregator seo * api gw seo * microservices log aggregration seo * mvc seo * mvi seo * mvp seo * mvvm seo * monad seo * monitor seo * monostate seo * multiton seo * mute idiom seo * naked objects & notification seo * null object seo * object mother seo * object pool seo * observer seo * optimistic locking seo * page controller seo * page object seo * parameter object seo * partial response seo * pipeline seo * poison pill seo * presentation model seo * private class data seo * producer-consumer seo * promise seo * property seo * prototype seo * proxy seo * queue-based load leveling seo * reactor seo * registry seo * repository seo * RAII seo * retry seo * role object seo * saga seo * separated interface seo * serialized entity seo * serialized lob seo * servant seo * server session seo * service layer seo * service locator seo * service to worker seo * sharding seo * single table inheritance seo * singleton seo * spatial partition seo * special case seo * specification seo * state seo * step builder seo * strangler seo * strategy seo * subclass sandbox seo * table module seo * template method seo * throttling seo * tolerant reader seo * trampoline seo * transaction script seo * twin seo * type object seo * unit of work seo * update method seo * value object seo * version number seo * virtual proxy seo * visitor seo * seo enhancements * seo improvements * SEO enhancements * SEO improvements * SEO additions * SEO improvements * more SEO improvements * rename hexagonal + SEO improvements * SEO improvements * more SEO stuff * SEO improvements * SEO optimizations * SEO enhancements * enchance SEO * improve SEO * SEO improvements * update headers
This commit is contained in:
1 parent
cb946c0cdc
commit
6cd2d0353a
219 files changed
+3308
-2819
No files matched your search
+18
-16
@@ -1,13 +1,15 @@
|
||||
---
|
||||
title: Promise
|
||||
title: "Promise Pattern in Java: Streamlining Async Tasks for Better Performance"
|
||||
shortTitle: Promise
|
||||
description: "Explore the Promise design pattern in Java, ideal for managing asynchronous operations efficiently. Learn how it enhances code readability and maintainability with practical examples and detailed explanations."
|
||||
category: Concurrency
|
||||
language: en
|
||||
tag:
|
||||
- Asynchronous
|
||||
- Decoupling
|
||||
- Messaging
|
||||
- Synchronization
|
||||
- Thread management
|
||||
- Asynchronous
|
||||
- Decoupling
|
||||
- Messaging
|
||||
- Synchronization
|
||||
- Thread management
|
||||
---
|
||||
|
||||
## Also known as
|
||||
@@ -15,11 +17,11 @@ tag:
|
||||
* Deferred
|
||||
* Future
|
||||
|
||||
## Intent
|
||||
## Intent of Promise Design Pattern
|
||||
|
||||
The Promise design pattern is used to handle asynchronous operations by providing a placeholder for a result that is initially unknown but will be resolved in the future.
|
||||
|
||||
## Explanation
|
||||
## Detailed Explanation of Promise Pattern with Real-World Examples
|
||||
|
||||
Real-world example
|
||||
|
||||
@@ -35,11 +37,11 @@ Wikipedia says
|
||||
|
||||
> In computer science, future, promise, delay, and deferred refer to constructs used for synchronizing program execution in some concurrent programming languages. They describe an object that acts as a proxy for a result that is initially unknown, usually because the computation of its value is not yet complete.
|
||||
|
||||
**Programmatic Example**
|
||||
## Programmatic Example of Promise Pattern in Java
|
||||
|
||||
The Promise design pattern is a software design pattern that's often used in concurrent programming to handle asynchronous operations. It represents a proxy for a value not necessarily known when the promise is created. It allows you to associate handlers with an asynchronous action's eventual success value or failure reason.
|
||||
|
||||
In the provided code, the Promise design pattern is used to handle various asynchronous operations such as downloading a file, counting lines in a file, and calculating the character frequency in a file.
|
||||
In the provided example, a Promise is used to download files and perform operations like line counting and character frequency analysis asynchronously, showcasing the pattern's utility in practical applications.
|
||||
|
||||
```java
|
||||
@Slf4j
|
||||
@@ -124,26 +126,26 @@ Program output:
|
||||
08:19:33.426 [pool-1-thread-2] INFO com.iluwatar.promise.App -- Char with lowest frequency is: ’
|
||||
```
|
||||
|
||||
## Applicability
|
||||
## When to Use the Promise Pattern in Java
|
||||
|
||||
* When you need to perform asynchronous tasks and handle their results or errors at a later point.
|
||||
* In scenarios where tasks can be executed in parallel and their outcomes need to be handled once they are completed.
|
||||
* Suitable for improving the readability and maintainability of asynchronous code.
|
||||
|
||||
## Tutorials
|
||||
## Promise Pattern Java Tutorials
|
||||
|
||||
* [Functional-Style Callbacks Using Java 8's CompletableFuture (InfoQ)](https://www.infoq.com/articles/Functional-Style-Callbacks-Using-CompletableFuture)
|
||||
* [Guide To CompletableFuture (Baeldung)](https://www.baeldung.com/java-completablefuture)
|
||||
* [You are missing the point to Promises (Domenic Denicola)](https://gist.github.com/domenic/3889970)
|
||||
|
||||
## Known Uses
|
||||
## Real-World Applications of Promise Pattern in Java
|
||||
|
||||
* Java's CompletableFuture and Future classes.
|
||||
* JavaScript’s Promise object for managing asynchronous operations.
|
||||
* Many asynchronous frameworks and libraries such as RxJava and Vert.x.
|
||||
* [Guava ListenableFuture](https://github.com/google/guava/wiki/ListenableFutureExplained)
|
||||
|
||||
## Consequences
|
||||
## Benefits and Trade-offs of Promise Pattern
|
||||
|
||||
Benefits:
|
||||
|
||||
@@ -156,13 +158,13 @@ Trade-offs:
|
||||
* Complexity: Can add complexity to the codebase if overused or misused.
|
||||
* Debugging: Asynchronous code can be harder to debug compared to synchronous code due to the non-linear flow of execution.
|
||||
|
||||
## Related Patterns
|
||||
## Related Java Design Patterns
|
||||
|
||||
* [Observer](https://java-design-patterns.com/patterns/observer/): Promises can be used in conjunction with the Observer pattern to notify subscribers about the completion of asynchronous operations.
|
||||
* [Callback](https://java-design-patterns.com/patterns/callback/): Promises often replace callback mechanisms by providing a more structured and readable way to handle asynchronous results.
|
||||
* [Async Method Invocation](https://java-design-patterns.com/patterns/async-method-invocation/): Promises are often used to handle the results of asynchronous method invocations, allowing for non-blocking execution and result handling.
|
||||
|
||||
## Credits
|
||||
## References and Credits
|
||||
|
||||
* [Effective Java](https://amzn.to/4cGk2Jz)
|
||||
* [Java 8 in Action: Lambdas, Streams, and functional-style programming](https://amzn.to/3QCmGXs)
|
||||
|
||||
Reference in new issue
Block a user