写了很简单的例子,用来测试 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
相关推荐
HTML+CSS3+JS+JQuery实现七夕言情动画、面向对象程序设计、Deferred对象解决异步编程回调嵌套问题
第二部分:异步编程初探与reactor模式 第三部分:初步认识Twisted 第四部分:由Twisted支持的诗歌客户端 第一个twisted支持的诗歌服务器 第一滴心血 第五部分:由Twisted支持的诗歌客户端 第一滴心血 第六...
异步模式在web编程中变得越来越重要,对于web主流语言Javscript来说,这种模式实现起来不是很利索,为此,许多Javascript库(比如 jQuery和Dojo)添加了一种称为promise的抽象(有时也称之为deferred)。通过这些库...
本文介绍了Node异步编程,分享给大家,具体如下: 目前的异步编程主要解决方案有: 事件发布/订阅模式 Promise/Deferred模式 流程控制库 事件发布/订阅模式 Node自身提供了events模块,可以轻松实现事件的发布/...
Shawn的Deferred Shading ppt 翻译 Shawn的Deferred Shading讲解ppt是很好的学习延迟着色的资源!
本文实例讲述了javascript异步处理与Jquery deferred对象用法。分享给大家供大家参考,具体如下: 这是项目组老大整理的一些关于jquery 异步处理请求,以及使用 jquery deferred 对象的一些常见方法。虽然是项目上...
Decalicious is here to satisfy all your longings for fancy Deferred Decals! Deferred Decals: Modify albedo, normals, specular, smoothness and emission for a plethora of effects Full Lighting & ...
异步模式在 Web 编程中变得越来越重要,如何处理异步请求后的操作是一件麻烦事。Promise 是一种异步编程模型,术语称作 Deferred 模式,它通过一组API来规范化异步操作,让异步操作的流程控制更加容易。
JDeferred is a Java Deferred/Promise library similar to JQuery's Deferred Object. Inspired by JQuery and Android Deferred Object. Features Deferred object and Promise Promise callbacks .then(…) ....
主要介绍了Javascript中的异步编程规范Promises/A详细介绍,同时介绍了jQuery 中的 Deferred 和 Promises,需要的朋友可以参考下
Shawn的Deferred Shading原文讲解ppt 对初学者理解Deferred Shading有一定的帮助
5. 异步队列 Deferred 5.1 概述 异步队列是一个链式对象,增强对回调函数的管理和调用,用于处理异步任务。 异步队列有三种状态:初始化(unresolved),成功(resolved),失败(rejected)。 执行哪些回调函数依赖...
deferred.el deferred.el提供了管理异步任务的工具。 API和实现是从 (由cho45编写)和 (由Bob Ippolito编写)翻译而来的。 (请注意, concurrent的README)安装您可以通过package.el从安装deferred.el。样例代码...
主要介绍了jQuery通过deferred对象管理ajax异步的相关资料,需要的朋友可以参考下
“单线程”和“无阻塞”是JavaScript的天性,因此任何需要“耗时”的操作,例如等待、网络通信、磁盘IO都只能提供“异步”的编程接口。尽管这对服务器的伸缩性和客户端的响应能力都大有脾益,但是异步接口在使用上要...
jquery基础教程之deferred对象使用方法
翻译《Deferred Shading》(2004年Shawn Hargreaves的经典文章)
jquery Deferred 快速解决异步回调的问题 function ok(name){ var dfd = new $.Deferred(); callback:func(){ return dfd.resolve( response ); } return dfd.promise(); } $.when(ok(1),ok(2)).then(function...