在异步处理时,经常用到两个接口Future 和 Promise。
说明:Netty中的Future与jdk中的Future同名,但是是两个接口,netty的Future继承了jdk的Future,而Promise又对Netty的Future进行了扩展。
JDK的Future只能同步等待任务结束(成功、失败)才能得到结果。FutureTask.get()方法。
Netty的Future可以同步等待任务结束得到结果,也可以异步方式得到结果,但都是要等任务结束。例如 closeFuture对象的sync方法,addListener方法就是添加回调,异步接收结果。
Netty的Promise不仅有Netty Future的功能,而且脱离了任务独立存在,只作为两个线程间传递结果的容器。setSuccess方法设置成功结果,setFailure方法设置失败结果。
JDK的Future
package com.xkj.netty;import lombok.extern.slf4j.Slf4j;import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;@Slf4j
public class TestJdkFutu