搜索
房产
装修
汽车
婚嫁
健康
理财
旅游
美食
跳蚤
二手房
租房
招聘
二手车
教育
茶座
我要买房
买东西
装修家居
交友
职场
生活
网购
亲子
情感
龙城车友
找美食
谈婚论嫁
美女
兴趣
八卦
宠物
手机

从源码上理解Netty并发工具-Promise

[复制链接]
查看: 116|回复: 0

1万

主题

1万

帖子

4万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
45263
发表于 2020-1-24 10:26 | 显示全部楼层 |阅读模式
条件

近来不停在看Netty关连的内容,也在编写一个轻量级的RPC框架来练手,途中发现了Netty的源码有很多亮点,某些实现甚至可以用刻薄来描述。此外,Netty供给的工具类也是相当杰出,可以开箱即用。这里分析一下小我比力喜好的范围,并发方面的一个Netty工具模块 - Promise。
从源码上理解Netty并发工具-Promise  热点新闻 1412331-20200124100317874-1480809519

情况版本:

  • Netty:4.1.44.Final
  • JDK1.8
Promise简介

Promise,中文翻译为答应大要答应,寄义是人与人之间,一小我对另一小我所说的具有必定向往的话,一样平常是可以实现的。
io.netty.util.concurrent.Promise在表白中只要一句话:特此外可写的io.netty.util.concurrent.Future(Promise接口是io.netty.util.concurrent.Future的子接口)。而io.netty.util.concurrent.Future是java.util.concurrent.Future的扩大,表示一个异步操纵的成果。我们晓得,JDK并发包中的Future是不成写,也没有供给可监听的进口(没有益用观察者形式),而Promise很好地补充了这两个题目。另一方面从继续关系来看,DefaultPromise是这些接口的终极实现类,所以分析源码的时候需要把重心放在DefaultPromise类。一样平常一个模块供给的功用都由接口界说,这里分析一下两个接口的功用列表:

  • io.netty.util.concurrent.Promise
  • io.netty.util.concurrent.Future
先看io.netty.util.concurrent.Future接口:
[code]public interface Future extends java.util.concurrent.Future {    // I/O操纵能否实行乐成    boolean isSuccess();    // 标志能否可以经过下面的cancel(boolean mayInterruptIfRunning)取消I/O操纵    boolean isCancellable();    // 返回I/O操纵的很是实例 - 假如I/O操纵自己是乐成的,此方式返回null    Throwable cause();    // 为当前Future实例增加监听Future操纵完成的监听器 - isDone()方式激活以后全数监听器实例会获得回调    Future addListener(GenericFutureListener> first, GenericFutureListener> second) {        listeners = new GenericFutureListener[2];        listeners[0] = first;        listeners[1] = second;        size = 2;        if (first instanceof GenericProgressiveFutureListener) {            progressiveSize ++;        }        if (second instanceof GenericProgressiveFutureListener) {            progressiveSize ++;        }    }    public void add(GenericFutureListener> l) {        GenericFutureListener>[] listeners = this.listeners;        final int size = this.size;        // 留意这里,每次扩容数组长度是本来的2倍        if (size == listeners.length) {            this.listeners = listeners = Arrays.copyOf(listeners, size

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright © 2006-2014 全椒百姓网-全椒知名**,发布及时新鲜的全椒新闻资讯 生活信息 版权所有 法律顾问:高律师 客服电话:0791-88289918
技术支持:迪恩网络科技公司  Powered by Discuz! X3.2
快速回复 返回顶部 返回列表