netty源码分析之Future/Promise

【netty】Netty并发工具-Promise 1.概述 转载并且补充:从源码上理解Netty并发工具-Promise 2.前提 最近一直在看Netty相关的内容,也在编写一个轻量级的RPC框架来练手,途中发现了Netty的源码有很多亮点,某些实现甚至可以用苛刻来形容。另外,Netty提供的工具类也是相当优秀,可以开箱即用。这里分析一下个人比较喜欢的领域,并发方面的一个Netty工具模块 - Promise。 环境版本: Netty:4.1.44.Final JDK1.8 3.Promise简介 Promise,中文翻译为承诺或者许诺,含义是人与. 阅读详情

一、前言

在分析Netty的源码的时候,一直看到Future、Promise之类的类,Future之前还接触过一点
知道大致是什么东西,不过Promise没了解过,所以在分析源码之前,顺便学习下Future/Promise~

二、Future

1、Future是什么?

首先需要明白一点的是,它不是netty自己私有的东西,它在jdk1.5后的concurrent包中就已经有
了.
通过一个例子了解本质:
1、client向server提交任务
2、server端开启一个线程去处理,但是也马上返回一个Future给client
3、client可能此时做一些其它操作
4、client获取Future对象,调用Future的方法(比方说get())来获取真正数据

代码例子参考:http://www.cnblogs.com/wade-luffy/p/6229410.html

原生jdk中Future类方法

由图可以看出,原生jdk提供的方法比较少.我们通过get()方法来获取异步执行的完成状态,如果执行完成返回结果,否则一直等待.但是这个方法有一个弊端,就是如果任务一直没完成,那就会处于一直等待的状态,即使有V get(long timeout, TimeUnit unit)这个函数,
如果超过了超时时间也会报超长,netty提供了更好的方法.

下面看下netty中的:

我们需要知道的是在netty每个操作都是异步的,(应该也不能这么说吧,应该说成非阻塞,因为底层是基于nio,aio才是完全异步的).

netty中Future类方法

它继承了原生的Future,扩充了方法,比方说:addListener(GenericFutureListener

2、ChannelFuture

ChannelFuture是netty中异步Future,作用是用来保存Channel异步操作的结果,这个实例将给你一些关于I/O操作结果或者状态的信息。

netty中ChannelFuture类方法

注意:调用await系列方法指定的等待超时时间和I/O超时时间之间是没有特定关系的。如果没有设置I/O超时时间,那么可能在await方法超时之后,future方法其实是没有执行完的。

2、Promise


    /**
     * Special {@link Future} which is writable.
     */
    public interface Promise<V> extends Future<V> {
        /**
         * Marks this future as a success and notifies all
         * listeners.
         *
         * If it is success or failed already it will throw an {@link IllegalStateException}.
         */
        Promise<V> setSuccess(V result);

        /**
         * Marks this future as a success and notifies all
         * listeners.
         *
         * @return {@code true} if and only if successfully marked this future as
         *         a success. Otherwise {@code false} because this future is
         *         already marked as either a success or a failure.
         */
        boolean trySuccess(V result);

        /**
         * Marks this future as a failure and notifies all
         * listeners.
         *
         * If it is success or failed already it will throw an {@link IllegalStateException}.
         */
        Promise<V> setFailure(Throwable cause);

        /**
         * Marks this future as a failure and notifies all
         * listeners.
         *
         * @return {@code true} if and only if successfully marked this future as
         *         a failure. Otherwise {@code false} because this future is
         *         already marked as either a success or a failure.
         */
        boolean tryFailure(Throwable cause);

        /**
         * Make this future impossible to cancel.
         *
         * @return {@code true} if and only if successfully marked this future as uncancellable or it is already done
         *         without being cancelled.  {@code false} if this future has been cancelled already.
         */
        boolean setUncancellable();

        @Override
        Promise<V> addListener(GenericFutureListener<? extends Future<? super V>> listener);

        @Override
        Promise<V> addListeners(GenericFutureListener<? extends Future<? super V>>... listeners);

        @Override
        Promise<V> removeListener(GenericFutureListener<? extends Future<? super V>> listener);

        @Override
        Promise<V> removeListeners(GenericFutureListener<? extends Future<? super V>>... listeners);

        @Override
        Promise<V> await() throws InterruptedException;

        @Override
        Promise<V> awaitUninterruptibly();

        @Override
        Promise<V> sync() throws InterruptedException;

        @Override
        Promise<V> syncUninterruptibly();
    }

从上面可以看出其实Promise就是一个可写的Future,没有我想象的那么复杂.其实如果是理解了Future,那么Promise其实也是能够理解了.从它继承Future
和添加的几个借口方法也能看出来它的大致用途.

三、总结

ok ,知道了什么是Future和Promise,接下来就可以开始netty源码之旅了~~~

参考博客:http://www.cnblogs.com/winkey4986/p/6203225.html

netty案例,netty4.1源码分析篇六《Netty异步架构监听类Promise源码分析》 分析Promise之前我们先来看两个单词;Promise、Future >Promise v. 许诺;承诺;答应;保证;使很可能;预示 Future n. 将来;未来;未来的事;将来发生的事;前景;前途;前程 他们的含义都是对未来即将要发生的事情做相应的处理,这也是在异步编程中非常常见的类名。 Netty是一个异步网络处理框架,在实现中大量使用了Future机制,并在Java自带Future的基础上,增加了Promise机制。这两个实现类的目的都是为了使异步编程更加方便使用。 阅读详情

相关推荐

jpromise:使用netty实现node.js的Promise的Java实现

概述 JPromise是node.js的延迟/承诺模式的实现。 根据 Promise是可写的,而Future是只读的。 JAVA将其实现为 。 Netty将其实现为和但是node.js将Promise视为只读对象。 和DeferredObject为可写。 它遵循node.js的概念。 JPromise与非常相似。 主要区别在于它使用netty的promise实现。 它使JPromise能够选择将在其中执行回调的线程。 它仅支持JAVA8。我喜欢lambda表达式。 要求 JAVA 8 净值 玛文 尚不支持。 您必须自己构建工件。 下载资源 使用mvn构建工件 mvn clean;mvn install 例子 基本的 DeferredObject< Integer> deferred = new DeferredObject<> (); Promise promise = d

netty-Future、Promise和Listener源码分析

1 netty Future的基本使用 编程语言中的future,顾名思义就是一个操作在将来才会完成,但是调用方不必同步等待结果,只要持有对应操作的future对象即可,等操作完成了,从future中获取结果。 netty Future是实现其异步非阻塞IO机制的重要对象。本文从演示netty Future的基本使用开始,再到源码角度分析其实现原理,最后剖析其在netty的异步非阻塞IO中如何使用...

Joel.Wang老王的专栏 2003

FPGA数字下变频实战:用Vivado DDS IP核实现IQ采样与频率校正(附MATLAB仿真对比)

本文提供了一份基于Vivado DDS IP核实现FPGA数字下变频(DDC)的完整工程指南。详细阐述了IQ采样的原理、DDC链路构建、DDS频率校正的工程实现,并重点介绍了如何利用MATLAB搭建黄金参考模型进行全链路仿真与对比验证,分享了关键的调试技巧与性能优化建议。

t1u2v的博客 810

future promise java_并发编程 Promise, Future 和 Callback

在并发编程中,我们通常会用到一组非阻塞的模型:Promise,Future 和 Callback。其中的 Future 表示一个可能还没有实际完成的异步任务的结果,针对这个结果可以添加 Callback 以便在任务执行成功或失败后做出对应的操作,而 Promise 交由任务执行者,任务执行者通过 Promise 可以标记任务完成或者失败。 可以说这一套模型是很多异步非阻塞架构的基础。这一套经典的模...

weixin_36382556的博客 332

EPLAN Electric P8 2025安装避坑指南:硬件、.NET 6与VM配置全解析

EPLAN Electric P8 是面向工业自动化电气设计的工程级CAD平台,其核心依赖于.NET运行时、DirectX硬件加速与本地许可证验证机制。随着2025版升级至.NET 6.0 Runtime、DirectX 12渲染引擎及双模授权校验,安装失败率显著上升——尤其在显卡驱动陈旧、虚拟机环境或企业离线场景下。技术价值在于保障PLC柜体布局、端子排自动生成、电缆清册输出等产线级功能稳定运行;典型应用场景包括高校电赛控制系统设计、包装线电控图纸交付及集成商多版本协同部署。本文聚焦EPLAN 2025安

weixin_30897079的博客 549

深入解析时钟同步技术:相位同步、频率同步与同源时钟的实战应用

本文深入解析时钟同步技术的三种核心方式:相位同步、频率同步与同源时钟,详细阐述其技术原理、实现方案及实战应用。通过对比分析不同同步方式的特点与适用场景,为电子系统设计提供选型指南,帮助工程师优化时钟网络设计,提升系统稳定性和性能。

weixin_29240711的博客 449

7. Netty源码分析之Future和Promise

一、Future   Future源自java.util.concurrent.Future,用于获取异步操作的结果,它通过get()方法获取异步操作结果,操作尚未完成,则阻塞。   Netty认为这是一个很不好的设计,操作结束时间难以确定,何不通过回调的方式获取结果呢。Netty的ChannelFuture通过监听的方式,当操作结束时调用注册在上面的方法获取操作结果。   Fut...

weixin_30783629的博客 523

2024年CSP-X复赛真题题解(T1:购物)

2024年CSP-X复赛真题题解(T1:购物)

王老师青少年编程 1177

探索Netty并发包之Future&Promise

探索Netty并发包之Future&Promise

我神级欧文的博客 2036

YOLOv11损失函数进阶:融合SmoothL1与FocalLoss,让检测精度再涨10%的实战教程

在YOLOv11的这里的beta参数控制“L1与L2的过渡阈值”,默认设为1.0即可兼容多数场景。同样在# 计算动态alpha(基于类别样本数,需提前统计self.class_counts)# 交叉熵基础# FocalLoss权重else:使用前需统计数据集的(每个类别的样本数),并传入的alpha参数。损失函数是YOLOv11精度的“灵魂”——SmoothL1让边界框回归“稳、准、狠”,改进FocalLoss让类别分类“雨露均沾”。从代码改造到实战落地,本教程已为你搭建了一条精度跃升的路径。

m0_64661770的博客 212

【AI大模型应用开发】【LlamaIndex教程】2. 存储模块:如何在 LlamaIndex 中使用自定义的向量数据库?(附代码)

前面文章两行代码就实现了文档的切分和向量化存储以及持久化存储。如果我们想用自定义的向量化数据库呢?

同学小张的博客 2116

Future和Promise

1、Future功能 Future最早来源于java.util.concurrent.Future,用于代表异步操作的结果。 可以通过get方法获取操作结果,如果操作尚未完成,则会同步阻塞当前调用的线程;如果不允许阻塞太长时间或者无限期阻塞,可以通过带超时时间的get获取结果;如果达到超时时间你操作仍然没有完成,则抛出TimeoutException。 可以通过isDone方法可以判断当前的...

sunshine052697的专栏 1115

最新扣子智能体教程:手把手教你接入抖音评论区,实现自动回复

摘要:本文介绍如何利用扣子(Coze)平台搭建智能体实现抖音评论自动回复。从准备工作(账号注册、权限申请)到智能体创建(提示词优化、模型选择),再到抖音API接入和自动回复逻辑设置,详细说明了每个步骤的操作方法。文章还提供了回复模板示例和优化建议,帮助提升互动效率。通过这套方案,创作者可以显著减轻评论区管理压力,增强用户互动体验。(149字)

互联网架构师笔记 982

netty5.0之Future和Promise

1、Future功能 Future最早来源于JDK的java.util.concurent.Future,它用于代表异步操作的结果。相关API如下: 可以通过get方法获取操作结果,如果操作尚未完成,则会同步阻塞当前调用的线程;如果不允许阻塞太长时间或者无限期阻塞,可以通过带超时时间的get方法获取结果;如果到达超时时间操作仍然没有完成,则跑出TimeoutException. isDone

李战磊专栏 2555

使用Simulink对液流电池在微电网中的动态响应进行建模与仿真

本文介绍了使用Simulink对液流电池在微电网中的动态响应进行建模与仿真的方法。通过搭建包含液流电池、双向DC-DC变换器、分布式能源和负载的微电网模型,并设计基于SOC的控制器,详细说明了从模型创建到仿真运行的完整流程。重点分析了液流电池在不同负载条件下的动态特性,评估了系统响应速度、充放电效率和稳定性等性能指标。该仿真方法为验证液流电池在微电网中的应用提供有效工具,有助于优化参数设计和提升系统可靠性。

amy_mhd的博客 136

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

netty依赖_认真的 Netty 源码解析(一)

本文又是一篇源码分析文章,其实除了 Doug Lea 的并发包源码,我是真不太爱写源码分析。因为要花非常多的时间,而且很多地方需要反复组织语言。本文将介绍 Netty,Java 平台上使用最广泛的 NIO 包,它是对 JDK 中的 NIO 实现的一层封装,让我们能更方便地开发 NIO 程序。其实,Netty 不仅仅是 NIO 吧,但是,基本上大家都冲着 NIO 来的。个人感觉国内对于 N...

weixin_39853863的博客 1593

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Netty源码分析篇:Netty 中的 Future、Promise

Netty源码分析篇:Netty 中的 Future、Promise

java_rutu的博客 1299

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

【Netty权威指南】15-Future和Promise

1、Future功能 Future最早来源于JDK的java.util.concurrent.Future,它用于代表异步操作的结果。相关API如图19-1所示。 可以通过get方法获取操作结果,如果操作尚未完成,则会同步阻塞当前调用的线程;如果不允许阻塞太长时间或者无限期阻塞,可以通过带超时时间的get方法获取结果;如果到达超时时间操作仍然没有完成,则抛出 TimeoutException...

通往神秘的道路的专栏 4952

Netty源码分析三 Future,Promise

前言 前面 分析了Netty整体的流程 和 Channel的结构,我们看到 Netty 中有很多的异步调用,所以在介绍更多 NIO 相关的内容之前,我们来看看它的异步接口是怎么实现的。 回顾 前面我们在介绍 Echo 例子的时候,已经用过了 ChannelFuture 这个接口了,接下来我们就来看看 Netty 中的异步调用是如何实现的。 客户端 // Start the client. Chan...

小张的专栏 788

Netty 异步机制深度解析:Future 与 Promise 的前世今生

Java 的 Future 不够用?Netty 的 Future 和 Promise 来补刀! 本篇文章不仅会帮你厘清标准 JDK Future 与 Netty 异步模型的关键差异,还会用实战代码展示 Promise 如何优雅解决异步嵌套、状态监听等难题,看完你就能写出更高质量的 Netty 项目代码!

学而时习之,不亦说乎?温故而知新,可以为师矣! 1080

Netty--Future和Promise

目录 概述 JDK.Future Netty.Future ChannelFuture Promise 继承关系 源码分析 AbstractFuture CompleteFuture DefaultPromise 概述 Future代表了异步操作的结果,Netty的Future对JDK的Future进行了扩展。 JDK.Future 仅定义了是否完成以及是否取消的...

demon7552003的小本本 489

【Netty】之 Future(Promise)

文章目录一、`Future`简介二、`Promise`简介(1)举个栗子(2)常用`Promise`类三、`Promise`源码浅析(1)`get()`(2)`await()`(3)`addListener()`(3)`notifyListeners()`(4)`setSuccess()`(5)`cancel()` Netty 版本:4.1.12.Final 一、Future简介 Nett...

fanfan4569的博客 551

【Netty】Future 源码分析(十六)

Netty 概述(一)Netty 架构设计(二)Netty Channel 概述(三)Netty ChannelHandler(四)ChannelPipeline源码分析(五)字节缓冲区 ByteBuf (六)(上)字节缓冲区 ByteBuf(七)(下)Netty 如何实现零拷贝(八)Netty 程序引导类(九)Reactor 模型(十)工作原理详解(十一)Netty 解码器(十二)Netty 编码器(十三)Netty 编解码器(十四)自定义解码器、编码器、编解码器(十五)

DreamSun的博客 2664

Netty 源码分析系列(十七)Promise详解

上篇文章我们讲解了 Netty 的 Future,本篇文章我就就来分析一下可写的 Future,也就是promise,Netty 中的 Promise 扩展自 Netty 的 Future。以上我们分析了 Netty 中的 Promise,知道了它是扩展自 Netty 的 Future,是一个可写的 Future。

初念初恋的博客 2959

【Netty】Promise 源码分析(十七)

Netty 概述(一)Netty 架构设计(二)Netty Channel 概述(三)Netty ChannelHandler(四)ChannelPipeline源码分析(五)字节缓冲区 ByteBuf (六)(上)字节缓冲区 ByteBuf(七)(下)Netty 如何实现零拷贝(八)Netty 程序引导类(九)Reactor 模型(十)工作原理详解(十一)Netty 解码器(十二)Netty 编码器(十三)Netty 编解码器(十四)自定义解码器、编码器、编解码器(十五)Future 源码分析(十六)

DreamSun的博客 3546

Netty5源码分析(七) -- 异步执行Future和Promise

java.util.concurrent.Future是Java提供的接口,表示异步执行的状态,Future的get方法会判断任务是否执行完成,如果完成就返回结果,否则阻塞线程,直到任务完成。 // Java FutureTask.get() public V get() throws InterruptedException, ExecutionException { i

ITer_ZC的专栏 8955
上一篇: system times on machines may be out of sync
下一篇: netty源码分析之服务端
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值