future promise java_第四章 Future和Promise

Netty是一个异步网络处理框架,在实现中大量使用了Future机制,并在Java自带Future的基础上,增加了Promise机制。这两者的目的都是使异步编程更加方便使用。在阅读源码之前,我们需要对Future的机制有很清楚的认识。

## 4.1 异步编程模型

### 4.1.1 Future

使用Future机制时,我们调用耗时任务会立刻返回一个Future实例,使用该实例能够以阻塞的方式或者在未来某刻获得耗时任务的执行结果,还可以添加监听事件设置后续程序。

```

function Future asynchronousFunction(String arg){

Future future = new Future(new Callable(){

public Object call(){

return null;

}

});

return future;

}

ReturnHandler handler = asynchronousFunction(); // 耗时函数,但会立即返回一个句柄

handler.getResult(); // 通过句柄可以等待结果

handler.addListener(); //通过句柄可以添加完成后执行的事件

handler.cancel(); // 通过句柄取消耗时任务

```

### 4.1.2 Promise

在Future机制中,业务逻辑所在任务执行的状态(成功或失败)是在Future中实现的,而在Promise中,可以在业务逻辑控制任务的执行结果,相比Future,更加灵活。

```

// 异步的耗时任务接收一个promise

function Promise asynchronousFunction(String arg){

Promise promise = new PromiseImpl();

Object result = null;

result = search() //业务逻辑,

if(success){

promise.setSuccess(result); // 通知promise当前异步任务成功了,并传入结果

}else if(failed){

promise.setFailure(reason); 通知promise当前异步任务失败了

}else if(error){

promise.setFailure(error); 通知promise当前异步任务发生了异常

}

}

// 调用异步的耗时任务

Promise promise = asynchronousFunction(promise) ;//会立即返回promise

//添加成功处理/失败处理/异常处理等事件

promise.addListener();// 例如,可以添加成功后执行的事件

doOtherThings() ; // 继续做其他事件,不需要理会asynchronousFunction何时结束

```

在Netty中,Promise继承了Future,包含了这两者的功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/271230.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在页面最上面显示当前登陆的状态

首先先判断一下session <li> <?php if(session(m_id)) : ?> 您好, <?php echo session(m_username); ?>[<a href"<?php echo U(Member/logout) ; ?>">退出</a>] <?php else : ?> 您好&#xff0c;欢迎来到京西&a…

python入门之运算符的使用的答案_python入门教程之基本算术运算符

一、算术运算符运算符-*/%**(幂)求次方//(取整除&#xff0c;向下取整)如&#xff1a;9//2 4二、比较运算符运算符!<>(不等于&#xff0c;类似&#xff01;)<>><#举例说明&#xff1a;x 10y 20print(x > y) # Falseprint(x < y) # Trueprint(x > …

JVM体系结构

JVM体系结构 Java虚拟机主要分为五大模块&#xff1a; 类装载器子系统运行时数据区执行引擎本地方法接口垃圾收集模块1、JVM一共分为五个区&#xff0c;分别为方法区、堆、Java栈、本地方法栈、程序计 2、方法区、堆为线程共享区域&#xff0c;GC会对二个区进行垃圾回收&…

找数据?这几个数据源网站就够用了?

来源&#xff1a;经管学苑转自&#xff1a;经管学苑大家好&#xff0c;我是小z在这个用数据说话的时代&#xff0c;能够打动人的往往是用数据说话的理性分析&#xff0c;无论是对于混迹职场的小年轻&#xff0c;还是需要数据进行分析和研究的同学&#xff0c;能够找到合适的数据…

solaris11-text-安装GUI(gnome)

http://blog.chinaunix.net/xmlrpc.php?rblog/article&uid45057&id3018467 1.下载所需的资源Text Installer CDRepository Image(a,b)http://www.oracle.com/technetwork/server-storage/solaris11/downloads/index.html2.用text CD安装solaris11安装那是相当的快呀&a…

java replaceall 大小写_Java replaceAll不区分大小写

Java 中replaceAll如何忽略大小写呢?方式一:在正则表达式前面添加(?i)Testpublic void test_replaceAll33(){String input "I like Java,jAva is very easy and jaVa is so popular.";String replacement"cccc";System.out.println(input);System.out.p…

jdk环境变量配置_jmeter及jdk的环境变量配置

jmeter是apache公司基于java开发的一款开源压力测试工具&#xff0c;其内部原理都是源于java的运行&#xff0c;并支持多种外部插件用于接口及性能测试&#xff0c;最主要的还是开源免费&#xff0c;在安装jmeter前必须配置jdk环境。jdk下载地址&#xff1a;https://www.oracle…

jvm是运行在操作系统之上的,他和硬件没有直接的交互

jvm是运行在操作系统之上的&#xff0c;他和硬件没有直接的交互

SQL语言基础:触发器相关知识介绍​

1、触发器 Trigger介绍触发器可以实现完整性规则和保证一些复杂业务规则的实施。针对示警或满足特定 条件下自动执行某项任务来说&#xff0c;触发器是十分有用的机制。触发器是由事件1驱动的特殊过程&#xff0c;一旦由某个用户定义&#xff0c;任何用户对该触发器指定的数据新…

socket与socketServer通信

服务端代码&#xff1a; public class TalkServer {public static void main(String args[]){try {//创建服务器&#xff0c;开放7777端口ServerSocket server new ServerSocket(7777);while(true){Socket socket server.accept();System.out.println("客户端与服务端已…

java struts2值栈ognl_Struts2的值栈和OGNL牛逼啊

Struts2的值栈和OGNL牛逼啊一 值栈简介&#xff1a;值栈是对应每个请求对象的一套内存数据的封装&#xff0c;Struts2会给每个请求创建一个新的值栈&#xff0c;值栈能够线程安全的为每个请求提供公共的数据存取服务。二 OGNL介绍&#xff1a;(1)基本数据&#xff1a;OGNL 是对…

还在用 Notepad++吗? 盘点五款更好用的文本编辑器

来自&#xff1a;oschina.net/news/110987/no-notepad-plus-plus | 责编&#xff1a;乐乐正文 Notepad 一直饱受争议&#xff0c;2018年开始然后引发了大家的关注&#xff0c;这里师长作为技术媒体&#xff0c;不方便带啥节奏&#xff0c;具体事件内容请大家自行百度。其实作…

python3列表_Python3 列表List(十一)

list是一种有序可重复的集合&#xff0c;可以随时添加和删除其中的元素。序列是Python中最基本的数据结构。序列中的每个元素都分配一个数字 - 它的位置&#xff0c;或索引&#xff0c;第一个索引是0&#xff0c;第二个索引是1&#xff0c;依此类推。Python有6个序列的内置类型…

ubuntu14.04 boost动态库找不到 libboost_system.so.1.58.0

error while loading shared libraries: : cannot open shared object file: No such file or directory 解决办法&#xff1a;向ld.so.conf文件中添加libboost_system.so.1.58.0所在的目录路径sudo vim /etc/ld.so.conf sudo ldconfig http://blog.csdn.net/smallfish0315/ar…

SQL语言:嵌入式SQL知识笔记

1、概念SQL提供了将SQL语句嵌入到某种高级语言中的使用方式&#xff0c;通常采用预编译的方法将SQL语句嵌入高级语言中。采用的方法由DBMS的预处理程序对源程序进行扫码、识别出SQL语句&#xff0c;把它们转换为主语言调用语句&#xff0c;这样可以让主语言编译程序能识别它&am…

Mysql bat脚本编写_第一次编写bat脚本

** 前言 **今天中午在宿舍不想做什么事&#xff0c;于是想到傻怡的电脑太卡了&#xff0c;多方面原因造成的&#xff0c;多软件安装于系统盘、安装了没用的杀毒软件等等&#xff0c;但是对于windows系统来说呢&#xff0c;使用时间长了&#xff0c;会有很多的缓存文件、日志文件…

python 关闭窗口事件_关于python:如何在Tkinter中处理窗口关闭事件?

如何在Python Tkinter程序中处理窗口关闭事件(用户单击" X"按钮)&#xff1f;Tkinter支持一种称为协议处理程序的机制。在这里&#xff0c;术语协议是指应用程序和窗口管理器之间的交互。最常用的协议称为WM_DELETE_WINDOW&#xff0c;用于定义当用户使用窗口管理器显…

windows+caffe(三)——求取图片的均值

这个要在图片已经转化成lmdb格式下才能求均值。。。 1.查看caffe根目录下的bin是否存在compute_image_mean.exe&#xff08;用的happey大神的&#xff09; 如果没有存在&#xff0c;你需要打开MainBuilder.sln&#xff0c;右键compute_image_mean-仅用于项目-仅生成compute_ima…