netty5笔记-线程模型1-Promise

这篇博客探讨了Netty为什么要自定义线程模型,通过对比Java内置的ExecutorService,解释了Netty线程模型的特点。文章通过大图展示了两者的区别,并详细讲解了Netty中的Promise和Future概念。Future代表异步任务的结果,而Promise在Netty中进行了增强,避免了线程绑定问题。作者提醒开发者在使用Promise的监听器时要注意避免耗时操作影响IO线程。
摘要由CSDN通过智能技术生成

        冬天实在太冷了,习惯了广东的天气,突然换个地方还真有点不适应, 早就想写的学习笔记也一直拖到现在。下面进入正题,一起来学习下netty的线程池实现。 我们知道java本身实现了一套线程池,即我们常见的ExecutorService。那么netty为什么还要定义自己的线程模型,什么时候适合用netty线程池,什么时候适合用ExecutorService。相信你看了这几篇文章就会有眉目。

        先来张大图,直观的看下netty线程模型和java自带线程池的区别:


        需要注意,此图对线程模型进行了简化。图左netty中的executor指jdk中的Executor接口。

        了解Promise前我们先看看Future。Future代表一个异步任务的结果,由于是异步任务,得到Future并不代表任务结束,你可以通过get来等待真正结果的返回,或者通过cancal来取消任务。netty对java.util.concurrent.Future进行了增强:

方法名 说明
isSuccess 任务是否执行成功
isCancellable 任务是否可以取消
cause 任务产生的异常
addListener 添加listener, 任务完成后执行listener,如果任务已经完成,则添加时立刻执行
removeListener 移除listener
sync 等待任务结束,如果任务产生异常或被中断则抛出异常,否则返回Future自身
syncUninterruptibly 等待任务结束,任务本身不可中断,如果产生异常则抛出异常,否则返回Future自身
await 等待任务结束,如果任务被中断则抛出中断异常,与sync不同的是只抛出中断异常,不抛出任务产生的异常
awaitUninterruptibly  等待任务结束,任务不可中断
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值