`
lippeng
  • 浏览: 455048 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Java异步编程之Deferred

 
阅读更多

写了很简单的例子,用来测试 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

 

0
0
分享到:
评论

相关推荐

    详谈javascript异步编程

    JavaScript中的异步编程是其核心特性之一,尤其在服务器端Node.js环境中,处理大量I/O操作时显得尤为重要。异步编程的主要目标是避免阻塞主线程,提高程序的响应性和效率。本文将深入探讨JavaScript中两种主要的异步...

    jQuery源码分析系列.pdf

    在JavaScript中,异步编程经常通过回调函数来处理,而jQuery通过Deferred对象提供了一种更清晰的方式来管理异步操作,它允许链式调用,使得异步编程更加直观和易管理。 jQuery的事件处理机制是其最核心的功能之一,...

    RetrofitKotlinDeferred:使用Retrofit2,Kotlin及其延迟类型的Android网络

    Kotlin的引入则为Android开发带来了许多强大的特性和便利,而`Deferred`则是Kotlin协程中的一个重要概念,用于异步编程。在这个名为“RetrofitKotlinDeferred”的项目中,我们将深入探讨如何将这些元素结合起来,以...

    监视用户的登入登出和页面推送技术

    在1.5版本中,jQuery增强了对CSS选择器的支持,改进了AJAX处理,提供了强大的插件支持,以及对 Deferred 对象的引入,使得异步编程更加易于理解和管理。 接下来是`DWR (Direct Web Remoting)`,这是一个开源Java...

    Learning Concurrency in Kotlin_ - Miguel Angel Castiblanco Torres

    协程允许程序员以顺序的方式编写并发代码,同时保持非阻塞的执行,这大大简化了异步编程的复杂性。 Kotlin的并发模型还包含了许多其他关键组件,例如`suspend`函数、`Channels`、`Jobs`和`CoroutineContext`等。`...

    es6入门基础

    Promise规范是异步编程中的一个核心概念,它在ES6中的引入,是受到了Python和JavaScript框架Dojo中的Deferred对象的启发。在Promise出现之前,JavaScript中的异步编程主要依赖于回调函数,而Promise的引入则为异步...

    承诺

    "承诺"这个词在IT领域的上下文中,可能是指Promise或Future的概念,这是异步编程中的关键概念,尤其是在JavaScript和某些支持异步操作的编程语言中。 Promise是JavaScript中处理异步操作的一种方式,它代表了一个...

    jdk1.8中文API及jQuery1.5中文API

    9. **$.Deferred()**:处理异步操作,引入Promise对象,增强了异步编程的控制和调试。 10. **$.extend()**:合并两个或更多对象的属性,常用于配置选项。 这两个API文档作为开发者的参考资料,提供了详细的函数...

    jquery高級編程

    由于提供的文件信息中部分内容涉及的是“Java学习群”的信息,并不直接关联到“jQuery高级编程”的主题,我将忽略这部分内容,并仅从标题和描述中提取知识点。 标题“jquery高級編程”和描述“《jQuery高级编程》从...

    gwt-testing:测试一些 libgdx gwt 的东西!

    为了确保GWT应用在Web上的性能,开发者可能利用了GWT的异步编程模型,使用Deferred Binding和Code Splitting来减少加载时间。此外,GWT的编译器还会进行一系列优化,例如消除死代码和优化JavaScript生成,以提高Web...

    GWT开发资料合集

    "中级GWT.doc"则进一步探讨了GWT的进阶特性,可能包括模块化系统、UI绑定(UiBinder)、本地化支持、异步通信(Deferred Binding和GWT Compile)以及优化技巧。这部分内容将帮助开发者提升应用性能,理解GWT如何生成...

    gwt 揭秘 源码

    例如,查看GWT编译器如何将Java代码转换为高效的JavaScript,或者研究GWT的异步通信机制实现。 7. **调试与开发工具** GWT提供强大的开发工具,如GWT DevMode,可以在浏览器内直接进行调试,实时查看和修改代码。...

    JavaScript多并发问题如何处理

    处理JavaScript中的多并发问题,需要灵活运用异步编程技术,合理利用现代JavaScript提供的并发控制机制,以及选择合适的第三方库来提升开发效率和用户体验。正确处理并发能够使Web应用更加流畅和响应更快。

    深入浅出ES6

    - 适用于异步编程和大数据流处理。 10. **不定参数(Rest Parameters)**: - 允许函数接收任意数量的参数,并将这些参数收集到一个数组中。 - 与展开操作符(Spread Operator)配合使用,可以轻松实现参数的...

    Android-为了彻底掌握Kotlin语法花了好几个月把官方文档翻译了一遍。

    - **异步编程**:Kotlin引入协程解决回调地狱问题,使异步代码看起来更像同步代码。 - **CoroutineScope**:定义协程作用域,控制协程的生命周期。 - **launch和async**:用于启动协程,`launch`用于后台执行,...

    Elements Of Kotlin Coroutines 0.1.zip

    《Kotlin协程元素0.1》是针对Kotlin编程语言中协程特性的深入解析。协程在现代软件开发中扮演着重要角色,尤其是在处理异步操作和高并发场景时,它们能提供更为优雅的解决方案。这个压缩包包含了一份详细讲解Kotlin...

    GWT 初级入门,中高级应用 开发文档手册 api(全)

    学习如何优化GWT应用,包括减少代码大小、使用 deferred binding 和 permutation、压缩和合并CSS及JavaScript文件,以及使用代码分割来减小首次加载时间。 八、GWT与其他技术的集成 了解如何将GWT与Spring、...

    Dart基础语法.pdf

    这些关键字增强了Dart的异步编程能力。 - `async`: 标记一个函数为异步。 - `async*`: 用于定义异步迭代器。 - `await`: 在异步函数中等待一个Future。 - `sync*`: 用于定义同步迭代器。 - `yield`: 生成器函数中...

    dojo相关的js

    除了xhr模块,Dojo还提供了一些高级的AJAX功能,如 Deferred 对象和Promises,它们对于处理异步操作的流程控制特别有效。通过这些工具,开发者可以编写出更优雅、易于维护的代码。 在Struts2中集成Dojo,通常需要...

Global site tag (gtag.js) - Google Analytics