Netty推荐addListener回调异步执行
说明
Netty推荐使用addListener的方式来回调异步执行的结果,这种方式优于Future.get,能够更精确地把握异步执行结束的时间。
错误理解使用addListener的方式
代码如下:


代码运行结果:

疑惑:很疑惑啊,按照上面Netty推荐使用addListener的方式来回调异步执行的结果,这种方式优于Future.get,能够更精确地把握异步执行结束的时间。而且也停顿了5s了,为什么还是顺序执行的呢?
感谢闪电侠、芋艿、晓峰的热心解答。
分析
这段代码 怎么执行都是顺序执行,不阻塞 最后,reactor线程里面都是同步的。
我们来跟踪代码进行查看:

关键在这里,执行完成write之后返回promise。

如果是reactor那么就顺序执行,否则就加入队列等待后续执行(如果是顺序的就是等执行完成返回,如果是加入队列就是异步)
这里重点不在writeAndFlush,先分析同步是执行的情况,异步的下面正确方式会分析,如果是同步方式:

也就是设置了值,之后promise之后返回。
那么:



所有就变成了java里面最普通的代码,一个线程代码从上到下执行。也解释了为什么没有走异步情况了。
正确理解使用addListener的方式
不在reactor线程里面执行,就可以做到最开始提到的:Netty推荐使用addListener的方式来回调异步执行的结果,这种方式优于Future.get,能够更精确地把握异步执行结束的时间。

执行效果如下:

继续进行分析:

关键在这里,执行完成write之后返回promise。

由于是异步直接返回,其实isDone为false,之后addListener就很快添加完成,就执行下面语句了。



这里也可以看到是writeAndFlush执行完成之后调用回调事件,这样才是真正做到了异步执行。
总结
由于之前理解不深刻,感谢闪电侠、芋艿、晓峰的热心解答,现在开朗多了,Netty继续学习中……,希望今天文章对你有所有收获!!!
文章github源代码地址:nettydemo,或者公号回复“Netty”获取源码地址。
如果读完觉得有收获的话,欢迎点赞、关注、加公众号【匠心零度】,查阅更多精彩历史!!!

Netty推荐addListener回调异步执行的更多相关文章
- php异步执行其他程序
这里的“其他程序”,可能是linux命令,可能是其他的php文件. 网上说法有四种.分别为: 1.通过加载页面的时候通过ajax技术异步请求服务器 2.通过popen()函数 3.通过curl扩展 4 ...
- uni-app 中实现 onLaunch 异步回调后执行 onLoad 最佳实践
前言 好久没写博客了,由于公司业务需要,最近接触uiapp比较多,一直想着输出一些相关的文章.正好最近时间富余,有机会来一波输出了. 问题描述 在使用 uni-app 开发项目时,会遇到需要在 onL ...
- 前端入门20-JavaScript进阶之异步回调的执行时机
声明 本系列文章内容全部梳理自以下几个来源: <JavaScript权威指南> MDN web docs Github:smyhvae/web Github:goddyZhao/Trans ...
- Promise then中回调为什么是异步执行?Promise执行机制问题
今天发现一个问题,看下方代码 let p = new Promise(function(resolve, reject) { resolve() console.log('); }); p.then( ...
- Netty实战一之异步和事件驱动
Netty是一款异步的事件驱动的网络应用程序框架,支持快速地开发可维护的高性能的面向协议的服务器和客户端. 使用Netty你可以并不是很需要网络编程.多线程处理.并发等专业Java知识的积蓄. Net ...
- PHP 命令行模式实战之cli+mysql 模拟队列批量发送邮件(在Linux环境下PHP 异步执行脚本发送事件通知消息实际案例)
源码地址:https://github.com/Tinywan/PHP_Experience 测试环境配置: 环境:Windows 7系统 .PHP7.0.Apache服务器 PHP框架:ThinkP ...
- 异步执行任务SimpleAsyncTaskExecutor详解
SimpleAsyncTaskExecutor 异步执行用户任务的SimpleAsyncTaskExecutor.每次执行客户提交给它的任务时,它会启动新的线程,并允许开发者控制并发线程的上限(con ...
- Python开发程序:RPC异步执行命令(RabbitMQ双向通信)
RPC异步执行命令 需求: 利用RibbitMQ进行数据交互 可以对多台服务器进行操作 执行命令后不等待命令的执行结果,而是直接让输入下一条命令,结果出来后自动打印 实现异步操作 不懂rpc的请移步h ...
- sql异步执行
/// <summary> /// 按钮事件 异步执行 /// </summary> /// <param name="sender">< ...
随机推荐
- XML结构,写到TreeView树上
http://blog.csdn.net/ztzi321/article/details/44077563
- ES6学习笔记(六)数组的扩展
1.扩展运算符 1.1含义 扩展运算符(spread)是三个点(...).它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列. console.log(...[1, 2, 3]) // ...
- CentOS 安装openssl
https://blog.csdn.net/ydyang1126/article/details/72902113 安装环境: 操作系统:CentOS 7 OpenSSL Version:openss ...
- Swift学习笔记(3)--基本运算符
基本运行符: +(加法.正数) - (减法.负数) * (乘法) / (除法) % (求余) : 在Swift中,求余可以是浮点数求余. &&(逻辑与) || (逻辑或) ^ (逻 ...
- Introducing ASLR for FreeBSD
Shawn WebbOliver Pinter10 July 2014http://www.hardenedbsd.org/ [ 1. Introduction ]Security in FreeBS ...
- HDU——T 1075 What Are You Talking About
http://acm.hdu.edu.cn/showproblem.php?pid=1075 Time Limit: 10000/5000 MS (Java/Others) Memory Lim ...
- 洛谷 P1013 进制位
P1013 进制位 题目描述 著名科学家卢斯为了检查学生对进位制的理解,他给出了如下的一张加法表,表中的字母代表数字. 例如: + L K V E L L K V E K K V E KL V V E ...
- [Python] Read and Parse Files in Python
This lesson will teach you how to read the contents of an external file from Python. You will also l ...
- iOS 开发之IPad的设计与实现
// // main.m // 6-ipad // #import <Foundation/Foundation.h> #import "Ipad.h" int mai ...
- 设计模式实例(Lua)笔记之六(Adapter模式)
1.描写叙述 "我"在 2004 年的时候带了一个项目,做一个人力资源管理,该项目是我们总公司发起的项目,公司一共同拥有 700 多号人,包含子公司,这个项目还是比較简单的,分为三 ...