声明:本文是《Netty 权威指南》的样章,感谢博文视点授权并发编程网站发布样章,禁止以任何形式转载此文。
执行TimeServer,运行结果如下:
执行TimeClient,运行结果如下:
下面我们继续看下JDK异步回调CompletionHandler的线程执行堆栈:
通过“Thread-2”线程堆栈我们可以发现,JDK底层通过线程池ThreadPoolExecutor来执行回调通知,异步回调通知类由sun.nio.ch.AsynchronousChannelGroupImpl实现,它经过层层调用,最终回调
com.phei.netty.aio.AsyncTimeClientHandler$1.completed方法,完成回调通知。由此我们也可以得出结论:异步Socket Channel是被动执行对象,我们不需要像NIO编程那样创建一个独立的IO线程处理读写操作,对于AsynchronousServerSocketChannel和AsynchronousSocketChannel,它们都由JDK底层的线程池负责回调并驱动读写操作。正因为如此,基于NIO2.0新的异步非阻塞Channel进行编程比NIO编程更简单。
本小节我们讲解了JDK1.7提供的新的异步非阻塞IO(AIO)的用法,由于国内商用的主流JAVA版本仍然是JDK1.6,因此,本小节不再详细介绍NIO2.0其它新增的特性,如果大家对NIO2.0的异步文件操作等特性感兴趣,可以选择阅读JDK1.7的相关书籍或者查看甲骨文发布的JDK1.7白皮书。
文章转自 并发编程网-ifeve.com