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