关于异步编程, JDK提供了Future接口, 但是此接口存在以下问题 :
A线程发起异步请求, A线程调用get()方法会被阻塞, 虽然提供了超时的get(timeout)但也无法满足要求....针对异步请求调用返回成功或异常或被取消三种情况都认为是完成, 不能细化这三种情况....于是Netty提供了自己的Future接口
我们来看下Netty是如何实现异步编程
我们先看下简单的测试用例代码
服务端部分代码如下
serverBootstrap.group(bossGroup, workerGroup...等IO线程写完数据后执行监听, 但实际上监听中的代码依然是A线程执行, 最后就打印了yyy .
上面的说法并没有错, 但依然不严谨....假如IO线程执行的比较快, 还没等A线程添加监听, IO线程就把数据写成功了, 那么A线程在执行添加监听的代码时, 判断数据已经写成功, 那么就直接执行监听里面的内容, 即打印yyy 最后再打印xxx