写了很简单的例子,用来测试 https://github.com/OpenTSDB/async
通过例子,可以看出Deferred的使用方式,执行顺序,理解了这个例子,基本上就明白了Deferred的工作机制。
Maven依赖:
<dependency> <groupId>com.stumbleupon</groupId> <artifactId>async</artifactId> <version>1.4.1</version> </dependency>
Java代码:
import com.stumbleupon.async.Deferred; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; import static java.lang.System.out; public class TestDeferred { public static void main(String[] args) throws InterruptedException { out.println(Thread.currentThread().getName()); Deferred<String> deferred = new Deferred<>().addBoth(str -> { out.println(Thread.currentThread().getName() + " 1 " + str.toString()); return str; }).addBothDeferring(str -> { out.println(Thread.currentThread().getName() + " 2 " + str); Deferred<String> d = new Deferred<>().addBoth(s -> { out.println(Thread.currentThread().getName() + " 3 " + s.toString()); return s.toString(); }); Executors.newSingleThreadExecutor().execute(() -> { out.println(Thread.currentThread().getName() + " started."); d.callback("hello"); }); return d; }).addBoth(str -> { out.println(Thread.currentThread().getName() + " 4 " + str.toString()); return str; }).addErrback(str -> { out.println(str.toString()); return str; }); Executors.newSingleThreadExecutor().execute(() -> { out.println(Thread.currentThread().getName() + " started."); // deferred.callback("hello"); deferred.callback(new NullPointerException("error.")); }); out.println(Thread.currentThread().getName() + " sleeping..."); TimeUnit.MINUTES.sleep(1); } }
输入:
main main sleeping... pool-1-thread-1 started. pool-1-thread-1 1 java.lang.NullPointerException: error. pool-1-thread-1 2 java.lang.NullPointerException: error. pool-2-thread-1 started. pool-2-thread-1 3 hello pool-2-thread-1 4 hello
相关推荐
JavaScript中的异步编程是其核心特性之一,尤其在服务器端Node.js环境中,处理大量I/O操作时显得尤为重要。异步编程的主要目标是避免阻塞主线程,提高程序的响应性和效率。本文将深入探讨JavaScript中两种主要的异步...
在JavaScript中,异步编程经常通过回调函数来处理,而jQuery通过Deferred对象提供了一种更清晰的方式来管理异步操作,它允许链式调用,使得异步编程更加直观和易管理。 jQuery的事件处理机制是其最核心的功能之一,...
Kotlin的引入则为Android开发带来了许多强大的特性和便利,而`Deferred`则是Kotlin协程中的一个重要概念,用于异步编程。在这个名为“RetrofitKotlinDeferred”的项目中,我们将深入探讨如何将这些元素结合起来,以...
在1.5版本中,jQuery增强了对CSS选择器的支持,改进了AJAX处理,提供了强大的插件支持,以及对 Deferred 对象的引入,使得异步编程更加易于理解和管理。 接下来是`DWR (Direct Web Remoting)`,这是一个开源Java...
协程允许程序员以顺序的方式编写并发代码,同时保持非阻塞的执行,这大大简化了异步编程的复杂性。 Kotlin的并发模型还包含了许多其他关键组件,例如`suspend`函数、`Channels`、`Jobs`和`CoroutineContext`等。`...
Promise规范是异步编程中的一个核心概念,它在ES6中的引入,是受到了Python和JavaScript框架Dojo中的Deferred对象的启发。在Promise出现之前,JavaScript中的异步编程主要依赖于回调函数,而Promise的引入则为异步...
"承诺"这个词在IT领域的上下文中,可能是指Promise或Future的概念,这是异步编程中的关键概念,尤其是在JavaScript和某些支持异步操作的编程语言中。 Promise是JavaScript中处理异步操作的一种方式,它代表了一个...
9. **$.Deferred()**:处理异步操作,引入Promise对象,增强了异步编程的控制和调试。 10. **$.extend()**:合并两个或更多对象的属性,常用于配置选项。 这两个API文档作为开发者的参考资料,提供了详细的函数...
由于提供的文件信息中部分内容涉及的是“Java学习群”的信息,并不直接关联到“jQuery高级编程”的主题,我将忽略这部分内容,并仅从标题和描述中提取知识点。 标题“jquery高級編程”和描述“《jQuery高级编程》从...
为了确保GWT应用在Web上的性能,开发者可能利用了GWT的异步编程模型,使用Deferred Binding和Code Splitting来减少加载时间。此外,GWT的编译器还会进行一系列优化,例如消除死代码和优化JavaScript生成,以提高Web...
"中级GWT.doc"则进一步探讨了GWT的进阶特性,可能包括模块化系统、UI绑定(UiBinder)、本地化支持、异步通信(Deferred Binding和GWT Compile)以及优化技巧。这部分内容将帮助开发者提升应用性能,理解GWT如何生成...
例如,查看GWT编译器如何将Java代码转换为高效的JavaScript,或者研究GWT的异步通信机制实现。 7. **调试与开发工具** GWT提供强大的开发工具,如GWT DevMode,可以在浏览器内直接进行调试,实时查看和修改代码。...
处理JavaScript中的多并发问题,需要灵活运用异步编程技术,合理利用现代JavaScript提供的并发控制机制,以及选择合适的第三方库来提升开发效率和用户体验。正确处理并发能够使Web应用更加流畅和响应更快。
- 适用于异步编程和大数据流处理。 10. **不定参数(Rest Parameters)**: - 允许函数接收任意数量的参数,并将这些参数收集到一个数组中。 - 与展开操作符(Spread Operator)配合使用,可以轻松实现参数的...
- **异步编程**:Kotlin引入协程解决回调地狱问题,使异步代码看起来更像同步代码。 - **CoroutineScope**:定义协程作用域,控制协程的生命周期。 - **launch和async**:用于启动协程,`launch`用于后台执行,...
《Kotlin协程元素0.1》是针对Kotlin编程语言中协程特性的深入解析。协程在现代软件开发中扮演着重要角色,尤其是在处理异步操作和高并发场景时,它们能提供更为优雅的解决方案。这个压缩包包含了一份详细讲解Kotlin...
学习如何优化GWT应用,包括减少代码大小、使用 deferred binding 和 permutation、压缩和合并CSS及JavaScript文件,以及使用代码分割来减小首次加载时间。 八、GWT与其他技术的集成 了解如何将GWT与Spring、...
这些关键字增强了Dart的异步编程能力。 - `async`: 标记一个函数为异步。 - `async*`: 用于定义异步迭代器。 - `await`: 在异步函数中等待一个Future。 - `sync*`: 用于定义同步迭代器。 - `yield`: 生成器函数中...
除了xhr模块,Dojo还提供了一些高级的AJAX功能,如 Deferred 对象和Promises,它们对于处理异步操作的流程控制特别有效。通过这些工具,开发者可以编写出更优雅、易于维护的代码。 在Struts2中集成Dojo,通常需要...