Netty源码分析(六)—Future和Promis分析

本文深入分析了Netty中的Future和Promise,它们扩展了JDK的Future模型,提供了监听器接口,避免了阻塞等待。Netty的ChannelFuture与Promise分别用于无返回值和可写入结果的异步调用,通过状态设置和监听器回调实现高效异步处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Netty源码分析(六)—Future和Promis分析

Future用来在异步执行中获取提前执行的结果

个人主页:tuzhenyu’s page
原文地址:Netty源码分析(六)—Future和Promis分析

(0) JDK中的Callable/Future模型

  • Callable与Runnable的区别在于Callable线程执行有返回值,Callable/Future模型是通过Future获取Callable线程的返回值;Callable线程的执行必须通过线程池的submit()提交;

    public static void main(String[] args) throws InterruptedException,ExecutionException{

        final ExecutorService exec = Executors.newFixedThreadPool(5);



        Callable call = new Callable(){

            public String call() throws Exception{

                Thread.sleep(1000 * 5);

                return "Other less important but longtime things.";

            }

        };

        Future task = exec.submit(call);

        //重要的事情

        Thread.sleep(1000 * 3);

        System.out.println("Let's do important things.");

        //其他不重要的事情

        String obj = (String)task.get();

        System.out.println(obj);

        //关闭线程池

        exec.shutdown();

    }

(1) JDK AIO中的Future使用

  • AsynchronousServerSocketChannel异步Socket执行accept()方法时不会阻塞线程,程序会继续执行;Future的get方法会判断任务是否执行完成,如果完成就返回结果,否则阻塞线程,直到任务完成。



public static void main(String[] args) throws Exception{
    AsynchronousServerSocketChannel serverSocketChannel = AsynchronousServerSocketChannel.open();
    serverSocketChannel.bind(new InetSocketAddress(30000));
    while (true){
        Future<AsynchronousSocketChannel> future = serverSocketChannel.accept();
        AsynchronousSocketChannel socketChannel = future.get();
        socketChannel.write(ByteBuffer.wrap("哈哈哈".getBytes("UTF-8"))).
### Netty 源码分析文章汇总 对于希望深入了解Netty源码的读者来说,一系列深入浅出的文章能够提供极大的帮助。以下是按照不同主题整理的一系列关于Netty源码解析的文章列表[^1]: #### 1. 初识Netty - **Netty入门**:介绍了Netty的基础概念及其优势所在。 #### 2. 核心组件剖析 - **Netty架构设计**:探讨了Netty的整体框架设计理念。 - **Channel详解**:解释了`Channel`接口的作用以及其实现方式。 - **ChannelHandler介绍**:描述了如何利用`ChannelHandler`处理网络事件。 - **ChannelPipeline**:讲述了消息传递过程中所经过的管道机制。 #### 3. 数据传输优化 - **字节缓冲区 ByteBuf(上下篇)**:详细解读了高效内存管理工具`ByteBuf`的工作原理。 - **Netty如何实现零拷贝**:讨论了减少数据复制开销的技术细节。 #### 4. 应用层协议支持 - **编程引导类 Bootstrap**:指导用户快速搭建基于Netty的应用程序。 - **Reactor模型**:阐述了异步I/O多路复用技术在Netty中的应用。 - **编解码器系列** - **编码器/解码器基础** - **自定义编解码器** #### 5. 启动流程揭秘 - **Server端启动过程源码分析**:逐步拆解服务器实例初始化直至监听端口绑定完成的关键步骤[^5]。 这些资源不仅适合初学者学习掌握基础知识,同时也非常适合有一定经验的研发人员进一步挖掘更深层次的功能特性。 ```java // 示例代码片段展示了NioServerSocketChannel的部分构造逻辑 public class NioServerSocketChannel extends AbstractNioMessageChannel { private final ServerSocketChannel javaChannel; public NioServerSocketChannel() throws ExceptionInInitializerError { this(ServerSocketChannel.open()); } } ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值