Netty-Future和Promise

  简析JDK中的Future机制:

    JDK中的通过实现Callable接口的类,传递进线程池后,会被重新包装成一个FutureTask类,该类实现RunnableFuture<V>,但是RunnableFuture<V>又继承Runnable接口,所以本质上FutureTask就是一个线程类,可被执行,最终执行run()方法。run()方法里面调用call()方法,FutureTask维护了两个字段:

              state:标识call()执行后的状态

    outcome:存储call()执行后的结果或者异常

而Future.get()方法实现的原理就是,通过无限循环访问state是否为成功,执行如果状态为成功,则退出循环返回outcome结果;

    Netty中实现了一个自己的ChannelFuture接口,用于异步IO操作的功能,该接口又继承JDK的Future接口,主要是基于JDK的Future机制拓展更多功能。例如addListener()功能等

     ChannelFuture的主要功能:

 

    

    

    ChannelPromise简析:

    ChannelPromise是可写的Futrue,可以写入异步操作的结果,例如:

    ChannelPromise setSuccess(Void result);//设置异步操作成功,并通知所有的listener

 

 

 

 

posted @ 2019-11-26 16:14  欧E  阅读(523)  评论(0编辑  收藏  举报